我正在尝试从String中替换所有出现的子字符串。
我想将"\t\t\t"
替换为"<3tabs>"
我想将"\t\t\t\t\t\t"
替换为"<6tabs>"
我想将"\t\t\t\t"
替换为"< >"
我正在使用
s = s.replace("\t\t\t\t", "< >");
s = s.replace("\t\t\t", "<3tabs>");
s = s.replace("\t\t\t\t\t\t", "<6tabs>");
但没有用,它不会取代任何东西,然后我尝试使用
s = s.replaceAll("\t\t\t\t", "< >");
s = s.replaceAll("\t\t\t", "<3tabs>");
s = s.replaceAll("\t\t\t\t\t\t", "<6tabs>");
同样,没有用,它不会取代任何东西。尝试这两种方法后,我尝试了StringBuilder
我能够通过StringBuilder
替换项目,我的问题是,为什么我无法直接通过上述两个命令中的String替换项目?有没有方法可以直接从String中替换项目?
答案 0 :(得分:2)
按此顺序尝试
String s = "This\t\t\t\t\t\tis\t\t\texample\t\t\t\t";
s = s.replace("\t\t\t\t\t\t", "<6tabs>");
s = s.replace("\t\t\t\t", "< >");
s = s.replace("\t\t\t", "<3tabs>");
System.out.print(s);
输出:
This<6tabs>is<3tabs>example< >
答案 1 :(得分:1)
6tabs永远不会找到匹配,因为它之前的检查已经用两个3tabs替换它们。
你需要先从最大的匹配开始。
字符串是不可变的,所以你不能直接修改它们,s.replace()返回一个新的String,其中包含修改。然后你将它分配回s,所以它应该可以正常工作。
按正确的顺序排列并使用调试器逐步完成,看看发生了什么。
答案 2 :(得分:0)
查看this
浏览文本,将其分成char []数组,然后使用for循环遍历各个字符。 不要直接打印出来,而是使用%x标签打印它们(如果你喜欢十进制数字,则打印%d。)
char[] characters = myString.tocharArray();
for (char c : characters)
{
System.out.printf("%x%n", c);
}
获取ASCII表并查找字符的所有数字,并查看是否有\ n或\ f或\ r \ n。在此之前或之后这样做。
不同的操作系统使用不同的行终止字符;这是我从谷歌发现的第一个“行终结者Linux Windows”。它说Windows使用\ r \ f和Linux \ f。你应该从你的例子中找到它。显然,如果你去掉\ n并离开\ r \ n,你仍然会将文本分成不同的行。
如果编写包含空格和行终止符的正则表达式(请参阅Java教程的这一部分等),并使用它作为String.split()方法的分隔符,则可能会更成功,然后打印个人令牌按顺序排列。