要在Java字符串上进行左右修剪吗
我有一个Java字符串,它在右边和左边都包含空格。我想删除两边的空白 我试过的代码要在Java字符串上进行左右修剪吗,java,Java,我有一个Java字符串,它在右边和左边都包含空格。我想删除两边的空白 我试过的代码 public class Test { public static void main(String args[]) { String abc = " Amebiasis "; System.out.println(abc +" length "+abc.length()); System.out.println(rtrim(abc)+" le
public class Test {
public static void main(String args[])
{
String abc = " Amebiasis ";
System.out.println(abc +" length "+abc.length());
System.out.println(rtrim(abc)+" length "+rtrim(abc).length());
System.out.println(ltrim(abc)+" length "+ltrim(abc).length());
String ltrim = abc.replaceAll("^\\s+","");
String rtrim = abc.replaceAll("\\s+$","");
System.out.println("ltrim"+ltrim);
System.out.println("rtrim"+rtrim);
}
public static String rtrim(String s) {
int i = s.length()-1;
while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
i--;
}
return s.substring(0,i+1);
}
public static String ltrim(String s) {
int i = 0;
while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
System.out.println("s.charAt(i) "+s.charAt(i));
i++;
}
return s.substring(i);
}
}
不知何故,它并没有删除空白。我的代码有什么问题,请帮助我。默认可用
我已经尝试了您的两个函数,
ltrim
和rtrim
,它们工作得很好。如果我理解正确,您希望这些函数将在适当的位置更改字符串的内容。这是不可能的,因为Java中的字符串是。如果您希望修剪字符串中的空白,然后继续处理字符串的修剪版本,则需要将rtrim
或ltrim
返回给abc
变量的值赋值:
String abc = " Amebiasis ";
abc = rtrim(abc); // abc now equals to " Amebiasis"
abc = ltrim(abc); // abc now equals to "Amebiasis"
您只需要将修剪过的字符串对象分配给新字符串,因为字符串是不可变的,trim()不能在具有相同地址的情况下编辑该字符串。所以,
String abc = " Amebiasis ";
String abcTrimmed = abc.trim();
应该工作。您的代码正在工作,问题中的输出是错误的,代码的实际输出是:
Amebiasis length 13
Amebiasis length 11
s.charAt(i)
s.charAt(i)
s.charAt(i)
s.charAt(i)
Amebiasis length 11
ltrimAmebiasis
rtrim Amebiasis
如果你只想两边都修剪,就这样做吧
String abc = abc.trim();
使用正则表达式删除两侧的所有空格:
return str.replaceAll("\\s*$", "").replaceAll("^\\s*", "");
使用该类,您可以轻松地左/右修剪任何给定字符(-class)的任何字符串:
如果要修剪空白,可以使用预定义的字符类:
Characters.WHITESPACE.trim( ... )
Characters.WHITESPACE.leftTrim( ... )
Characters.WHITESPACE.rightTrim( ... )
该类还提供了其他类型的字符操作,例如
压缩
,替换
或拆分
,您可以使用\\S*
例如:
String name = "Hello :: World";
abc.replaceAll("\\s*::\\s*", "");
输出将是
HelloWorld
你有什么理由不能使用已经定义好的
trim
方法吗?@Dennis Meng
它也不起作用。当你说它“不起作用”时,你到底是什么意思?输出结果是什么?“@jmort253”不起作用,表示没有从侧面删除空白。实际上,请稍候。仅从左侧或右侧删除空格是否重要?如果你想从一方而不是另一方删除空白,那么我同意,trim
不是正确的方法。我不知道这是怎么被否决的。只需运行这个测试用例:public类测试{public static void main(String[]args){String abc=“Amebiasis”;System.out.println(“>”+abc.trim()+"好吧,我想我可以代表下层选民发言。当你第一次发布这篇文章时,这里没有太多内容。这是正确的,但我认为你可以添加更多内容,请随意以我的评论为例。我还建议引用trim文档中的第一句话,以巩固trim应该解决这个问题的观点。希望这有帮助! :)@newuser
感谢您的回答,我发现问题是当我从excel复制字符串时,并没有按照我所做的和您的回答进行修剪。从excel复制字符串时,并没有得到问题的准确答案,但我接受您的回答。thanks@Win我不知道为什么。我也读了excel表格,我喜欢它是。就此再问一个问题。你肯定会得到答案是的,它将两边都修剪。这个答案很有意义!我认为你可能已经解决了op的问题。非常好的答案:)+1提醒我们Java中的字符串是不可变的!我不会否决你的答案,但它比公认的答案慢。请使用Pattern.compile(“\\s*$”).matcher(str).replaceAll(“”)而不是str.replaceAll(),将模式存储在某个位置,以避免在每次调用时重新编译这两个模式。我刚刚查看了您的源代码,您在每次调用时重新编译模式,您不应该这样做,它不能扩展到数十万个字符串。
Characters.WHITESPACE.trim( ... )
Characters.WHITESPACE.leftTrim( ... )
Characters.WHITESPACE.rightTrim( ... )
String name = "Hello :: World";
abc.replaceAll("\\s*::\\s*", "");
HelloWorld