Java Java Method for Replacing String in a Text

  • Thread starter Thread starter JaysFan31
  • Start date Start date
  • Tags Tags
    Method
AI Thread Summary
The discussion centers on a Java programming challenge where a user is trying to create a method to replace occurrences of a substring within a string. The user encounters "index out of range" errors while attempting to implement the logic for cases where the replacement string is longer than the substring being replaced. The initial code compiles but fails during execution due to incorrect handling of string lengths and index adjustments. Key suggestions include modifying the loop condition to prevent out-of-bounds errors and ensuring that the length of the original string is updated correctly after replacements. The conversation also emphasizes the importance of using Java's built-in methods, such as `replaceAll`, to simplify the task and avoid manual string manipulation errors. The use of JavaDocs for documentation is recommended to enhance code clarity. Overall, the discussion highlights common pitfalls in string manipulation in Java and the benefits of leveraging existing library functions.
JaysFan31
Hi. I just need some help tweaking a program I'm working on for a class. I just started taking Java a few weeks ago, so I need to use elementary language.
Basically, I have to create a method that does what it says in the comment (replace each occurrence of the second string in the first string with the third string).
The first two loops work (if and else if) obviously work fine. I just need help with the third one (when the lengthFind < lengthOriginal). The code makes sense to me and it compiles. However, I get all kinds of "index out of range" problems. I have no idea how to fix these and because of that I can't check my code anyways.
With something like ("She sells seashells by the sea shore", "sh", "shm"), I should return "She sells seashmells by the sea shmore".
Any help, advice, or tiny tweaks to the code would be appreciated. I'm pretty much out of ideas at this point.

Code:
// (c) method called replaceString
 // method looks for occurrences of second string in first string
 // method replaces each occurrence of second string in first string with third string
public static String replaceString(String original, String find, String replacement)
{
  int lengthOriginal = original.length();
  int lengthFind = find.length();
  int lengthReplacement = replacement.length();
  String finalString = "";
  String mutation = "";
  if (lengthFind > lengthOriginal)
  {
    finalString = original;
  }
  else if (lengthFind == lengthOriginal)
  {
    if (find.equals(original))
    {
    finalString = replacement;
    }
    else
    {
      finalString = original;
    }
  }
  else
  {
    for (int i = 0; i <= lengthOriginal; i++)
    {
      String partBefore;
      String partAfter;
      char characterOriginal = original.charAt(i);
      char characterFind = find.charAt(0);
      mutation = original.substring(i, i + lengthFind);
      if (mutation.equals(find))
      {
        partBefore = original.substring(0, i);
        partAfter = original.substring(i + lengthFind);
        finalString = partBefore + replacement + partAfter;
      }
    }
    finalString = original;
  }
  return finalString;
}
 
Technology news on Phys.org
This is my revised code:

*Note* I'm just including the last section (the else statement similar to the code in my first post):

Code:
else
  {
	for (int i = 0; i <= (lengthOriginal - lengthFind); i++)
	{
	  String partBefore;
	  String partAfter;
	  mutation = original.substring(i, i + lengthFind);
	  if (mutation.equals(find))
	  {
		partBefore = original.substring(0, i);
		partAfter = original.substring(i + lengthFind);
		original = partBefore.concat(replacement);
		original = original.concat(partAfter);
		System.out.println(original);
	  }
	  finalString = original;
	}
	finalString = original;
  }

It works perfectly if LengthFind <= LengthReplacement. I just can't get it to work when lengthReplacement is larger than the LengthFind. It does everything correctly. It compiles and I even included the System.out.println(original); to see what the string looks like at that step (it's correct there.) However, it prints like ten lines of "index out of range" errors still. Obviously, it's working. I just can't get it to work without these errors. Can anyone help me?

Again, I want to input something like ("She sells seashells", "he", "h") and output "Sh sells seashlls".
 
If you change the length of the string "original", then your variable "lengthOriginal" is no longer the length of the string.

Also, when you find a match, you might want to think about adjusting "i" as well. For example if you replaced ab with aa, this might happen:

abbbxx becomes aabbxx
then
aabbxx becomes aaabxx
then
aaabxx becomes aaaaxx

which might not be what you wanted.
 
Thank you so much. It was as simple as changing "lengthOriginal" and just making it "original.length()."

Again I really appreciate it.
 
You should use Java docs and the standard library. The Java Way:

Code:
/**
	 * Replaces each occurrence of the find string in original string with
	 * replacement string
	 * 
	 * @param original
	 * @param find
	 * @param replacement
	 * @return replaced string.
	 */
	public static String replaceString(String original, String find,
			String replacement) {

		return original.replaceAll(find, replacement);
	}

If nothing else try to use JavaDocs for comments.
 
haki said:
You should use Java docs and the standard library. The Java Way:

Code:
/**
	 * Replaces each occurrence of the find string in original string with
	 * replacement string
	 * 
	 * @param original
	 * @param find
	 * @param replacement
	 * @return replaced string.
	 */
	public static String replaceString(String original, String find,
			String replacement) {

		return original.replaceAll(find, replacement);
	}

If nothing else try to use JavaDocs for comments.

Somehow I get the feeling he won't get very many marks for that solution.
 
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...
Thread 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...
Back
Top