5

例如,我用 + 分割字符串“+name”。我在数组中有一个空格“”和“名称”(如果我的字符串是“名称+”,则不会发生这种情况)。

t="+name";
String[] temp=t.split("\\+");

上面的代码产生

temp[0]=" "
temp[1]=name

我只想得到没有空格的“名字”..

此外,如果 t="name+" 则 temp[0]=name。我想知道name+和+name有什么区别。为什么我得到不同的输出。

4

7 回答 7

3

只需像下面那样循环遍历数组中的项目并删除空格

for (int i = 0; i < temp.length; i++){
    temp[i] = if(!temp[i].trim().equals("") || temp[i]!=null)temp[i].trim();
}
于 2012-12-12T05:34:31.570 回答
1

第一个数组项的值不是空格 ( " "),而是空字符串 ( "")。以下片段演示了该行为并提供了一种解决方法:我只是从输入中去除前导分隔符。请注意,这不应该用于处理 csv 文件,因为前导分隔符会创建一个通常需要的空列值。

    for (String s : "+name".split("\\+")) {
        System.out.printf("'%s'%n", s);
    }

    System.out.println();

    for (String s : "name+".split("\\+")) {
        System.out.printf("'%s'%n", s);
    }

    System.out.println();

    for (String s : "+name".replaceAll("^\\+", "").split("\\+")) {
        System.out.printf("'%s'%n", s);
    }
于 2012-12-12T06:27:30.997 回答
1

您得到"+name"'s case 的额外元素是因为分隔符后的非空值“name”。

split()函数仅“修剪”导致数组末尾空元素的尾随分隔符。请参阅JavaSE 手册

输出示例.split("\\+")

"+++++"     = { }                // zero length array because all are trailing delimiters
"+name+"    = { "", "name" }     // trailing delimiter removed
"name+++++" = { "name" }         // trailing delimiter removed
"name+"     = { "name" }         // trailing delimiter removed
"++name+"   = { "", "", "name" } // trailing delimiter removed

我建议防止在两端使用这些额外的分隔符,而不是事后清理。

于 2012-12-12T06:57:41.330 回答
0

删除空白

str.replaceAll("\\W","").
于 2012-12-12T05:34:46.140 回答
0

String yourString = "name +";
yourString = yourString.replaceAll("\\W", "");
yourArray = yourString.split("\\+");

于 2012-12-12T05:35:45.433 回答
0

对于一个班轮:

String temp[] = t.replaceAll("(^\\++)?(\\+)?(\\+*)?", "$2").split("\\+");

这会将所有多个加号替换为一个,或者将开头的加号替换为空字符串,然后拆分为加号。这将基本上消除结果中的空字符串。

split(String regex)等效于split(String regex, int limit)limit = 0。后者的文档指出:

如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。

这就是为什么'+'开头的 a'+'与结尾的 a 不同的原因

于 2012-12-12T07:55:33.310 回答
0

你可能想试试番石榴分离器。它有一个很好的流利的 api 来处理 emptyStrings、trim() 等。

@Test
public void test() {
    final String t1 = "+name";
    final String t2 = "name+";

    assertThat(split(t1), hasSize(1));
    assertThat(split(t1).get(0), is("name"));

    assertThat(split(t2), hasSize(1));
    assertThat(split(t2).get(0), is("name"));
}

private List<String> split(final String sequence) {
    final Splitter splitter = Splitter.on("+").omitEmptyStrings().trimResults();
    return Lists.newArrayList(splitter.split(sequence));
}
于 2012-12-12T12:34:51.043 回答