例如,我用 + 分割字符串“+name”。我在数组中有一个空格“”和“名称”(如果我的字符串是“名称+”,则不会发生这种情况)。
t="+name";
String[] temp=t.split("\\+");
上面的代码产生
temp[0]=" "
temp[1]=name
我只想得到没有空格的“名字”..
此外,如果 t="name+" 则 temp[0]=name。我想知道name+和+name有什么区别。为什么我得到不同的输出。
例如,我用 + 分割字符串“+name”。我在数组中有一个空格“”和“名称”(如果我的字符串是“名称+”,则不会发生这种情况)。
t="+name";
String[] temp=t.split("\\+");
上面的代码产生
temp[0]=" "
temp[1]=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();
}
第一个数组项的值不是空格 ( " "
),而是空字符串 ( ""
)。以下片段演示了该行为并提供了一种解决方法:我只是从输入中去除前导分隔符。请注意,这不应该用于处理 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"
'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
我建议防止在两端使用这些额外的分隔符,而不是事后清理。
删除空白
str.replaceAll("\\W","").
String yourString = "name +";
yourString = yourString.replaceAll("\\W", "");
yourArray = yourString.split("\\+");
对于一个班轮:
String temp[] = t.replaceAll("(^\\++)?(\\+)?(\\+*)?", "$2").split("\\+");
这会将所有多个加号替换为一个,或者将开头的加号替换为空字符串,然后拆分为加号。这将基本上消除结果中的空字符串。
split(String regex)
等效于split(String regex, int limit)
limit = 0。后者的文档指出:
如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。
这就是为什么'+'
开头的 a'+'
与结尾的 a 不同的原因
你可能想试试番石榴分离器。它有一个很好的流利的 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));
}