JAVA如何删除阵列上的空白

JAVA如何删除阵列上的空白,java,Java,比如说 我将字符串“+名称”拆分为+。数组中有一个空格“”和“name”(如果字符串是“name+”,则不会出现这种情况) 上面的代码生成 temp[0]=" " temp[1]=name 我只想得到没有空格的“name” 如果t=“name+”则temp[0]=name。我想知道name+和name+之间有什么区别。为什么我会得到不同的输出。只需像下面这样循环遍历数组中的项,并删除空白 for (int i = 0; i < temp.length; i++){ temp[i]

比如说 我将字符串“+名称”拆分为+。数组中有一个空格“”和“name”(如果字符串是“name+”,则不会出现这种情况)

上面的代码生成

temp[0]=" "
temp[1]=name
我只想得到没有空格的“name”


如果t=“name+”则temp[0]=name。我想知道name+和name+之间有什么区别。为什么我会得到不同的输出。

只需像下面这样循环遍历数组中的项,并删除空白

for (int i = 0; i < temp.length; i++){
    temp[i] = if(!temp[i].trim().equals("") || temp[i]!=null)temp[i].trim();
}
str.replaceAll("\\W","").
for(int i=0;i
删除空白

for (int i = 0; i < temp.length; i++){
    temp[i] = if(!temp[i].trim().equals("") || temp[i]!=null)temp[i].trim();
}
str.replaceAll("\\W","").


第一个数组项的值不是空格(
),而是空字符串(
)。下面的代码片段演示了该行为并提供了一种解决方法:我只需从输入中去掉前导分隔符。请注意,这不应用于处理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);
    }

您将获得
“+name”
的额外元素,其大小写是由于分隔符后面的非空值“name”

split()。看

.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

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

对于单行程序:

String temp[] = t.replaceAll("(^\\++)?(\\+)?(\\+*)?", "$2").split("\\+");
这将用一替换所有多个加号,或用空字符串替换开头的加号,然后按加号拆分。 这将基本上消除结果中的空字符串

split(String regex)
相当于
split(String regex,int limit)
的limit=0。后者的文件规定:

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


这就是为什么开始时的
'+'
与结束时的
'+'
效果不同的原因

您可能想试试番石榴。它有一个很好的fluent api来处理emptyString、trim()等

@测试
公开无效测试(){
最后一个字符串t1=“+name”;
最后一个字符串t2=“name+”;
资产(拆分(t1),hasSize(1));
资产(拆分(t1).get(0)为(“名称”);
资产(拆分(t2),hasSize(1));
资产(拆分(t2).get(0)为(“名称”);
}
私有列表拆分(最终字符串序列){
final Splitter Splitter=Splitter.on(“+”).ommitEmptyStrings().trimResults();
返回Lists.newArrayList(splitter.split(sequence));
}

如果元素本身是空白,该选项是否能够修剪元素?或者,如果字符串包含空格,则只删除空格。它只删除空格。它在数组中生成null值而不是空格。确定..只需检查null。如果(数组[i].trim().equals(“”){,则将此替换为if(数组[i]==null){仍然为空值。我不知道为什么拆分字符串“+name”时会得到空格,但没有得到字符串“name+”的空格。这不起作用,因为“+name”没有空格。但是拆分“+name”时按+我在数组中有一个空格你正在从字符串中删除空格,然后你正在使用循环吐出。此字符串“+name”没有空格。但是当我按数组=字符串拆分此字符串时。拆分(\\+”)。我在数组[0]中有一个空格,这不起作用,因为“+name”没有空格。但是拆分“+name”时by+我在数组中有一个空格,我不知道为什么它不适合你。但是如果你试着看一下这段代码,它实际上是有效的。String str=“name+”;str=str.replaceAll(\\W)”;String[]array=str.split(\\\+”;for(int I=0;I\\++
。嗨,John,如果它对你有帮助,请你将它标记为答案。谢谢。
@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));
}