从String中删除项目

时间:2013-12-10 11:45:25

标签: java android string

我正在尝试从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中替换项目?

3 个答案:

答案 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()方法的分隔符,则可能会更成功,然后打印个人令牌按顺序排列。