11

我有 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);
    }
}

我得到的输出...  

  Amebiasis   length 13
  Amebiasis length 11
  Amebiasis   length 13
ltrim  Amebiasis  
rtrim  Amebiasis

不知何故,它不会删除空白。我的代码有什么问题,请帮助我。

4

7 回答 7

15

默认可用的trim()

String abc = "  Amebiasis  ";
System.out.println(""+abc.trim());
于 2013-10-02T05:31:56.537 回答
10

我已经尝试了您的两个功能,ltrim并且rtrim它们工作正常。如果我理解正确,您希望这些函数会更改字符串的内容。这是不可能的,因为 Java 中的字符串是不可变的。如果您希望从字符串中修剪空格,然后继续使用修剪后的字符串版本,则需要分配rtrimltrim返回abc变量的值:

String abc = "  Amebiasis  ";
abc = rtrim(abc); // abc now equals to "  Amebiasis"
abc = ltrim(abc); // abc now equals to "Amebiasis"
于 2013-10-02T05:52:04.357 回答
7

使用正则表达式从两侧删除所有空格:

return str.replaceAll("\\s*$", "").replaceAll("^\\s*", "");
于 2015-10-08T12:57:19.140 回答
5

使用Characters类,您可以轻松地左/右修剪任何给定字符的任何字符串(-class):

Characters.valueOf('x').trim( ... )
Characters.valueOf('x').leftTrim( ... )
Characters.valueOf('x').rightTrim( ... )

如果您想修剪空格,可以使用预定义的字符类:

Characters.WHITESPACE.trim( ... )
Characters.WHITESPACE.leftTrim( ... )
Characters.WHITESPACE.rightTrim( ... )

该类确实还具有其他类型的字符操作,condense例如replacesplit

于 2016-01-04T19:58:10.590 回答
1

您的代码正在运行,您的问题中的输出是错误的,您的代码的真正输出是:

  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();
于 2015-02-12T21:01:31.513 回答
0

您只需要将修剪后的字符串对象分配给新字符串,因为字符串是不可变的,并且 trim() 在具有相同地址时无法编辑该字符串。所以;

String abc = "  Amebiasis  ";
String abcTrimmed = abc.trim();

应该管用。

于 2013-10-02T06:06:15.810 回答
-1

您可以通过使用简化\\S*

例子:

String name = "Hello      ::    World";
abc.replaceAll("\\s*::\\s*", "");

输出将是

HelloWorld
于 2017-04-14T05:10:53.830 回答