这是我的字符串....
〜ABC DEF ~~ ~~~ b ~~~
我想用(〜)分割这个字符串。使用简单的简单我不能将最后一部分作为空白/ null。
输出m寻找..
null
abc
null
null
def
null
null
null
b
null
null
null
答案 0 :(得分:2)
split
不会返回null
,而是""
空字符串。默认情况下,它还会从结果数组中删除空尾随字符串。如果您要关闭此优化,请使用split(regex,limit)
,其中包含负limit
text.split("~", -1)
但请注意,split只在分隔符之间生成空元素 。因此,对于像~~~
和分隔符~
这样的部分文本,它只会生成两个空字符串。如果你真的想要产生三个空格,你可以使用像
text.split("~|(?<=~)(?<!^~|~$)", -1)
此正则表达式的想法是不仅要在~
上拆分,而且还要在~
之类的分隔符组中的最后~~
之后立即拆分以添加空字符串。这种方法的问题是当我们分割放置在字符串的开头或结尾的~
时,不需要这样的空字符串,所以我们需要避免这种倾斜。
为了实现这一切,我使用了look-around mechanism,或者更确切地说,使用了后方(?<=...)
和负面后方(?<!...)
。这些机制将检查在...
部分中指定的正则表达式当前位置存在/不存在之前是否匹配。
所以~|(?<=~)(?<!^~|~$)
会分开
~
每个代字号
|
或
(?<=~)
前面有~
的地方,
(?<!^~|~$)
但不是之后:
^~
代字号位于字符串的开头(由^
锚点表示),~$
位于字符串的末尾(由$
锚点表示。)样本:
String text = "~abc~~def~~~b~c~~~";
for (String s : text.split("~|(?<=~)(?<!^~|~$)", -1)) {
System.out.println("'" + s + "'");
}
输出:
''
'abc'
''
''
'def'
''
''
''
'b'
''
'c'
''
''
''
答案 1 :(得分:1)
你不能返回null,但也许这可以帮助你。
String str = "~abc~~def~~~b~~~";
str = str.replaceAll("~", "-");
char[] chars = str.toCharArray();
for (int i =0; i < chars.length; i++)
{
String check = Character.toString(chars[i]);
if(check.contentEquals("-"))
{
System.out.println();
System.out.println(check);
}
else
{
System.out.print(check);
}
}
答案 2 :(得分:1)
怎么样:
使用String tokenizer在Java中拆分字符串而不拆分:
import java.util.StringTokenizer;
public class tt {
public static void main(String a[]){
String s = "012ab567ab0123ab";
String delims = "ab ";
StringTokenizer st = new StringTokenizer(s, delims);
System.out.println("No of Token = " + st.countTokens());
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
或使用您的拆分功能
public class MySplit {
public static String[] mySplit(String text,String delemeter){
java.util.List<String> parts = new java.util.ArrayList<String>();
text+=delemeter;
for (int i = text.indexOf(delemeter), j=0; i != -1;) {
parts.add(text.substring(j,i));
j=i+delemeter.length();
i = text.indexOf(delemeter,j);
}
return parts.toArray(new String[0]);
}
public static void main(String[] args) {
String str="012ab567ab0123ab";
String delemeter="ab";
String result[]=mySplit(str,delemeter);
for(String s:result)
System.out.println(s);
}
}
答案 3 :(得分:0)
要省略空白/ null,您可以使用Guava
:
Iterable<String> strs = Splitter.on('~').omitEmptyStrings().split(toSplit);