我有一个关于字符串解析的问题。
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 '<'
如果我指定了这个字符串,我将获得带有替换字符的子字符串,而不是带有替换换行字符的原始字符串
答案 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对象但未将其分配回变量,因此是您发出的原因。