代码之家  ›  专栏  ›  技术社区  ›  Crystal

Java,使用foreach循环向ArrayList添加修改后的字符串

  •  1
  • Crystal  · 技术社区  · 15 年前

    List<String> newString = new ArrayList<String>(); 
    for (String s : lineOfWords {  // lineOfWords is a String that has text in it
       s = s.replaceAll("\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); 
       newString.add(s); 
    }  
    

    提前谢谢!

    EDIT:我的意思不是让它更改原始字符串,而是将新字符串(在本例中是s)添加到我的newstringarraylist中。

    5 回复  |  直到 15 年前
        1
  •  0
  •   djna    15 年前

    你原来的名单是不变的。

        2
  •  3
  •   Drew Wills    15 年前

    是的,字符串是不可变的。所以打电话给。。。

    s = s.replaceAll("\\b(\\w+)\\b(\\s+\\1)+\\b", "$1"); 
    

    在这行执行之后, s 是一个全新的字符串,不是您开始使用的字符串。

    更新 希望如此 lineOfWords 是字符串对象的数组吗?不是“包含文本的字符串”

        3
  •  1
  •   Michael Myers KitsuneYMG    15 年前

    是的,每次调用时都会创建一个新的String对象 s.replaceAll . 然后将新字符串对象赋给临时变量 s List 或者在原稿中的任何字符串上 列表 .

        4
  •  0
  •   Gopi    15 年前

        5
  •  0
  •   Fish    15 年前

    在执行replace操作时,您正在创建一个新的string对象,因为Java中的字符串是不可变的。

    您可以使用“==”操作符亲自查看对象实际上是相同还是不相同的,它在对象上使用时比较引用。由于String是一个对象,所以它具有这种引用比较行为,但有时由于java将字符串插入到实际上引用同一对象的两个相等的字符串中而使它混淆。