Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

ReplaceString method

  1. Jun 2, 2007 #1
    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 (Text):

    // (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;
    }
     
     
  2. jcsd
  3. Jun 3, 2007 #2
    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 (Text):

    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".
     
  4. Jun 4, 2007 #3

    AlephZero

    User Avatar
    Science Advisor
    Homework Helper

    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.
     
  5. Jun 4, 2007 #4
    Thank you so much. It was as simple as changing "lengthOriginal" and just making it "original.length()."

    Again I really appreciate it.
     
  6. Jun 7, 2007 #5
    You should use Java docs and the standard library. The Java Way:

    Code (Text):
    /**
         * 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.
     
  7. Jun 8, 2007 #6

    Alkatran

    User Avatar
    Science Advisor
    Homework Helper

    Somehow I get the feeling he won't get very many marks for that solution.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: ReplaceString method
  1. Help with a method (Replies: 3)

  2. Gcd method (Replies: 4)

  3. Bisection Method (Replies: 2)

  4. Newton Method (Replies: 1)

  5. Method of Complements (Replies: 3)

Loading...