這裏是我的字符串....
〜ABC ~~高清~~~ b ~~~分割控制如何打破了 「空」 的部分
我想(〜)拆分此字符串。使用簡單的簡單我不能夠得到最後一部分爲空/空。
輸出我想找..
null
abc
null
null
def
null
null
null
b
null
null
null
這裏是我的字符串....
〜ABC ~~高清~~~ b ~~~分割控制如何打破了 「空」 的部分
我想(〜)拆分此字符串。使用簡單的簡單我不能夠得到最後一部分爲空/空。
輸出我想找..
null
abc
null
null
def
null
null
null
b
null
null
null
split
沒有返回null
,但""
空字符串。同樣默認情況下,它會從結果數組中刪除空的尾部字符串。如果你想關閉這個優化使用split(regex,limit)
負limit
像
text.split("~", -1)
但是請注意,分裂產生的空元素只有分隔符之間。因此,如果部分文字如~~~
和分隔符~
只會產生兩個空白字符串。如果你真的要產生三個空格,你可以使用類似
text.split("~|(?<=~)(?<!^~|~$)", -1)
知道這個正則表達式的就是分裂不僅~
而且在地方是正確的最後~
後一組的分隔符像~~
在添加空白字符串。這種方法的問題是,當我們在放置在字符串的開始或結尾處的~
上分割時,這樣的空白字符串是不必要的,所以我們需要避免這種歪斜。
爲了使所有可能我使用look-around mechanism,或更確切地說,後視(?<=...)
和負面後視(?<!...)
。這些機制將檢查在當前位置存在之前是否存在/不存在匹配...
部分中指定的正則表達式。
所以~|(?<=~)(?<!^~|~$)
將在
~
分裂每個波形符具有~
之前
|
OR
(?<=~)
地方,
(?<!^~|~$)
,但並不後:
^~
波浪線是在我們的字符串(由^
錨表示)開始,~$
放置在我們的字符串的末尾(由$
錨表示)。DEMO:
String text = "~abc~~def~~~b~c~~~";
for (String s : text.split("~|(?<=~)(?<!^~|~$)", -1)) {
System.out.println("'" + s + "'");
}
輸出:
''
'abc'
''
''
'def'
''
''
''
'b'
''
'c'
''
''
''
要省略空/空,你可以使用Guava
:
Iterable<String> strs = Splitter.on('~').omitEmptyStrings().split(toSplit);
「*我無法將最後一部分作爲空白/空白*」,所以它看起來像OP不想省略空字符串。 – Pshemo
你不能返回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);
}
}
怎麼樣:
使用字符串標記分裂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);
}
}
你想要做什麼是不所謂的字符串拆分。你想要一個函數,每次發現它時都會輸出null〜? –
「使用簡單的簡單」你的意思是「使用簡單的分裂」? – yshavit
確實可能是java中的一個bug。 輸出爲: '', 'ABC', '', '高清', '', '', 'B' 代碼: 字符串S =「〜ABC DEF ~~ ~~~ b〜 ~~「; String s [] = S.split(「[〜]」); (String ss:s) System.out.println(「'」+ ss +「',」); –