trim()方法无法正常工作(Java)

7

我想要统计一个字符串中除空格外的字符数量,但是我的trim()方法似乎没有去掉空格:

class Test {

HashMap<Character, Integer> testMap = new HashMap<>();

public void encode(String text) {
    String code = text.trim();
    for (int i = 0; i < code.length(); i++) {
        Character key = code.charAt(i);
        if (testMap.containsKey(key)) {
            testMap.put(key, testMap.get(key) + 1);
        } else {
            testMap.put(key, 1);
        }

    }
    System.out.println(testMap);
    System.out.println(code);
}

主方法:

public class MyMain {

public static void main(String[] args) {
    Test test = new Test();
    test.encode("Tessstttt faill");

}

因此输出结果为:

{ =1, a=1, s=3, T=1, t=4, e=1, f=1, i=1, l=2}
Tessstttt faill

我的错误在哪里。非常感谢!

(我还不是很有经验,如果有明显的错误,请见谅)

2
.trim() 只会去除字符串末尾的空格,而不会去除字符串内部的空格。 - aryn.galadar
.trim() 并不是无法工作;它按预期工作。问题在于你误解了它的作用... trim() 不像 tr - fge
5个回答

15

Trim无法去除所有空格,只能去除开头和结尾的空格。如果想要去除所有空格,可以使用以下方法:

text.replaceAll("\\s","")

正则表达式变得令人讨厌和难以理解。我更喜欢使用text.replace(char, char),除非你需要多个字符,但在这种情况下是不需要的。replace仍然替换所有出现的字符,只是一次只能替换一个字符。 - Mrab Ezreb
哦,天啊,非常感谢。是的,这很明显!xD 没有足够注意 trim() 的工作原理。 - Noli
@Mrab 空格符不仅仅是 [ ],还有制表符等等。如果你只使用空格符,那么你会错过其他的符号。 - Eric Hotinger
然后对空格、制表符等等执行相同的操作。 - Mrab Ezreb

4
你误解了 trim() 的用法。
Returns a copy of the string, with leading and trailing whitespace omitted.

使用replace()代替删除所有空格。
text.replace(" ","");

1
< p > trim() 方法仅从字符串开头和结尾删除空格。然而,您的测试字符串中的空格位于中间某个位置。

也许比修剪更好的选择是对空格字符进行单独检查。为此,Character 类提供了一个静态的 isWhitespace(char) 方法。


0

Trim不会这样做。Trim会做类似于这样的事情

" hello world ".trim() > "hello world"

而是使用.replace

" hello world ".replace(' ', '') > "helloworld"

0
实际上,Java 中的 trim() 方法仅省略字符串前后的空格,而不会省略中间的空格。请参阅 http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()
因此,在这种情况下,它也不会省略 Tessstttt 和 fail 之间的空格。
您可以使用 replace() 方法删除这个空格,例如:code = code.replace(" ", "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接