【问题标题】:Java substring a local variable inside a while loopJava子串在while循环内的局部变量
【发布时间】:2013-10-25 14:53:54
【问题描述】:

我一直在尝试构建一个 while 循环,用于在字符串包含我正在寻找的“模式”时循环该字符串。该字符串是一个局部变量,在 while 循环上方声明,我无法在我的 while 循环中对其进行子字符串化,因此每个连续循环都会查看字符串的下一部分。

如果能帮助我解决这个问题,我将不胜感激

这是代码;只是这样你就有了 onlineList 通常作为数组列表输出的想法,例如[阿德里安,鲍勃,巴迪]

                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);

                }

【问题讨论】:

  • 你告诉我们你想让你的代码做什么,但没有告诉我们它实际上在做什么。
  • 我最后想要实现的是将 tempOnlineUserName 添加到新的 JList 的组件名称中,这可能已经可以工作但是我陷入了无限循环
  • 问题中某处的无限循环有帮助。无论如何,提供的所有 3 个答案都将解决并修复您的无限循环

标签: java string substring


【解决方案1】:

字符串在java中是不可变的

 modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);

您必须接收substring 方法返回的 String 对象。

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

当你收到时

 modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);
 System.out.println(modifiedOnlineList);   // now re assigned to substring value 

【讨论】:

    【解决方案2】:

    字符串是不可变的。这意味着substring 不会修改字符串本身,而是返回一个新的字符串对象。所以你应该使用:

    modifiedOnlineList = modifiedOnlineList.substring(tempFirstOccurence + 2);
    

    【讨论】:

      【解决方案3】:

      modifiedOnlineList.substring() 只是返回原始modifiedOnlineList 的子串,它不修改modifiedOnlineList。

      【讨论】:

        猜你喜欢
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-13
        相关资源
        最近更新 更多