要在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

我有一个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)+" 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