使用string.split()时前导空格

时间:2013-04-20 05:05:34

标签: java string removing-whitespace

这是我用来分割字符串

的代码
str = "1234".split("") ; 
System.out.println(str.length) ; //this gives 5

在1之前添加了一个额外的空格,即str[0]=" " 如何在没有前导空格的情况下拆分此字符串。

6 个答案:

答案 0 :(得分:2)

试试这个:

char[] str = "1234".toCharArray();
System.out.println(str.length) ;

答案 1 :(得分:1)

你实际上并没有得到一个领先的空白元素,你正在获得一个领先的空字符串,从打印整个数组可以看出:

System.out.println(java.util.Arrays.toString("1234".split("")));

输出:

[, 1, 2, 3, 4]

该行为的基本原理是"1234".indexOf("")0。即,分隔符字符串在搜索的字符串的开头匹配,因此它在那里创建一个分割,在返回的数组中给出一个空的初始元素。分隔符也匹配字符串的末尾,但是你不会在那里得到一个额外的空元素,因为(如String.split文档所述)"尾随空字符串将被丢弃"

然而,Java 8的行为was changed。现在文档也说:

  

如果在此字符串的开头存在正宽度匹配,则在结果数组的开头包含空的前导子字符串。 开头的零宽度匹配但是从不会产生这样的空前导子串。

(比较Java 7Java 8String.split文档。)

因此,在Java 8及更高版本中,上例中的输出是:

[1, 2, 3, 4]

有关更改的详细信息,请参阅:Why in Java 8 split sometimes removes empty strings at start of result array?

无论如何,在这种特殊情况下使用String.split是过分的。其他答案是正确的,以获得您应该使用str.toCharArray()的所有字符的数组,这更快,更直接。如果您确实需要一个单字符字符串数组而不是一个字符数组,请参阅:Split string into array of character strings

答案 2 :(得分:0)

使用toCharArray()代替....................

答案 3 :(得分:0)

如果你想拆分“”那么应该使用toCharArray方法的字符串。

String str = "1234";
System.out.println(str.toCharArray().length);

答案 4 :(得分:0)

如果您使用的是Java 7或更低版​​本,请使用以下命令:

con.query('USE jdjkhrjps1cgj89h', function (err) {
    if (err) throw err;
    con.query('CREATE TABLE IF NOT EXISTS storage('
        + 'id INT NOT NULL AUTO_INCREMENT,'
        + 'PRIMARY KEY(id),'
        + 'link VARCHAR(255),'
        + 'item VARCHAR(255),'
        + 'stock VARCHAR(255)'
        +  ')', function (err) {
            if (err) throw err;
        });
});

答案 5 :(得分:-1)

我会这样做:

str = "1 2 3 4".split(" ");  

除非有特定理由说明为什么必须是“1234”