![](/img/trans.png)
[英]How to split a string with the character “[” using split() in java
[英]Using split in Java String
我需要用點'.'分割一個字符串但是有一個如下解釋的捕獲例如,如果一個字符串是這樣的
String str = "A.B.C"
然后,用點分割,將得到A,B and C
。
但是如果某個部分用單引號標記,那么 split 應該忽略它
String str = "A.B.'C.D'"
然后,用點分割,應該給A,B and CD
。
我怎樣才能做到這一點?
如果字符串始終采用給定格式,您可以嘗試 : \\\\.(?![A-Za-z]')
作為正則表達式
首先,在'
和之后拆分,如果任何拆分結果以.
,分裂於.
再次。
"A.B.'C.D'"
=>
"A.B.", "C.D"
=> "A", "B", "C.D"
public static void main(String[] args) {
final String str = "A.B.'C.D'";
final List<String> result = new ArrayList<>();
for (String singleQuoteSplitResultArrayElement : str.split("'")) {
if (singleQuoteSplitResultArrayElement.endsWith(".")) {
Collections.addAll(result, singleQuoteSplitResultArrayElement.split("\\."));
} else {
result.add(singleQuoteSplitResultArrayElement);
}
}
System.out.println(result.stream().collect(Collectors.joining(", ")));
}
您可以做的如下 - 將使用單個字母和多個字母標記:
String input = "A.B.'C.D'";
// | not following capital letter(s) and '
// | | dot (escaped)
// | | | not followed by
// | | | capital letter(s) and '
System.out.println(Arrays.toString(input.split("(?<![A-Z]+?')\\.(?![A-Z]+?')")));
輸出
[A, B, 'C.D']
筆記
如果您希望它不區分大小寫,請在Pattern
加上(?i)
: (?i)(?<![AZ]+?')\\\\.(?![AZ]+?')")
我不知道標准庫中有什么方法可以做到這一點。 不過,自己編寫並不太難:
public static String[] splitByDots(String s)
{
List<String> ss = new ArrayList<>();
boolean inString = false;
int start = 0;
for (int p = 0; p < s.length(); p++) {
char ch = s.charAt(p);
if (ch == '\'') {
inString = !inString;
}
else if (ch == '.') {
if (!inString) {
ss.add(s.substring(start, p));
start = p + 1;
}
}
}
ss.add(s.substring(start));
return ss.toArray(new String[ss.size()]);
}
如果要修剪空格或刪除引號字符,則必須稍微調整上面的代碼,否則它會按您的要求執行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.