字符串解析,替换换行符

时间:2016-03-09 15:56:16

标签: java regex string

我有一个关于字符串解析的问题。

String str = "jdaskks sms=<hello
hi wini>";

在这里你可以看到,字符串中出现的新行字符。 我编写了一个程序,搜索sms= string,然后从< >字符获取子字符串。我在其中检查新行字符并将其替换为' “

但我有问题,当我得到子串。我替换它。但是如何在原始字符串str中更改它,因为我可以看到子字符串中的更改不是原始字符串。

非常感谢帮助。

str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10");
here j is index of '<'

如果我指定了这个字符串,我将获得带有替换字符的子字符串,而不是带有替换换行字符的原始字符串

3 个答案:

答案 0 :(得分:3)

字符串在Java中是不可变的 - 像replace之类的操作实际上并不更新原始字符串。您必须使用substring调用的返回值,例如

String updated = str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10");

如果你想在整个字符串中替换它,你可以简单地将它连接回字符串:

int indexOf = str.indexOf('>',j+1);
str = str.substring(0, j)
    + str.substring(j,indexOf).replaceAll("\n", "#10"))
    + str.substring(indexOf);

答案 1 :(得分:1)

您可以获取子字符串,但不是将其分配给字符串或用于显示。因为字符串是immutable

所以只需将结果分配给新字符串:

String result= str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10");

或用它来显示。

System.Out.Println(str.substring(j,str.indexOf('>',j+1)).replaceAll("\n", "#10"));

答案 2 :(得分:0)

由于您已创建新的String对象但未将其分配回变量,因此是您发出的原因。