Java substring a local variable inside a while loo

2019-03-01 15:42发布

I have been trying to construct a while loop for looping through a string when it contains a 'pattern' i'm looking for. The string is a local variable, declared just above the while loop and I am unable to substring it within my while loop, so that each consecutive loop will look at the next part of the string.

I would appreciate any help on how I could solve this problem

Here's the code; just so u have the idea the onlineList usually comes as array list output e.g. [Adrian, Bob, Buddy]

                String onlineList = networkInput.nextLine();
                //Declare a local variable for modified online list, that will replace all the strings that contain ", " "[" and "]"
                String modifiedOnlineList = onlineList.replaceAll("\\, ", "\n").replaceAll("\\[", "").replaceAll("\\]", "");
                //Loop the modifiedOnlineList string until it contains "\n"
                while (modifiedOnlineList.contains("\n")) {
                    //A local temporary variable for the first occurence of "\n" in the modifiedOnlineList
                    int tempFirstOccurence = modifiedOnlineList.indexOf("\n");
                    //Obtain the name of the currently looped user
                    String tempOnlineUserName = modifiedOnlineList.substring(0, tempFirstOccurence);
                    //Substring the remaining part of the string.
                    modifiedOnlineList.substring(tempFirstOccurence + 2);
                    System.out.println(modifiedOnlineList);

                }

3条回答
一夜七次
2楼-- · 2019-03-01 16:09

String is immutable in java

 modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);

You have to receive the new String Object returned by substring method.

 modifiedOnlineList.substring(tempFirstOccurence + 2);
 System.out.println(modifiedOnlineList);   // still old value 

when you receive that

 modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);
 System.out.println(modifiedOnlineList);   // now re assigned to substring value 
查看更多
3楼-- · 2019-03-01 16:16

Strings are immutable. That means that substring does not modify the string itself, but returns a new string object. So you should use:

modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);
查看更多
爷的心禁止访问
4楼-- · 2019-03-01 16:31

modifiedOnlineList.substring() just returns a substring of the original modifiedOnlineList, it doesn't modify modifiedOnlineList.

查看更多
登录 后发表回答