我的輸入字串如下:
String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
我的預期結果是
- 目錄,
- 子目錄1,
- subdir2\n\t\tfile.ext
要求是按“\n\t”而不是“\n\t\t”分割輸入。一個簡單的嘗試
String[] answers = input.split("\n\t");
還從最后一個條目拆分“\tfile.ext”。有沒有簡單的正則運算式來解決問題?謝謝!
uj5u.com熱心網友回復:
您可以在換行符和制表符上拆分,并在其右側斷言不是制表符。
\n\t(?!\t)
請參閱正則運算式演示。
String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
String[] answers = input.split("\\n\\t(?!\\t)");
System.out.println(Arrays.toString(answers));
輸出
[dir, subdir1, subdir2
file.ext]
uj5u.com熱心網友回復:
如果您正在尋找通用方法,則很大程度上取決于輸入通常具有的格式。如果您的格式對于所有可能的輸入(dir\n\tdir2\n\tdir3\n\t\tfile.something)都是靜態的,那么一種方法是:
String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
String[] answers = input.split("\n\t");
for (int i = 1; i < answers.length; i )
if (answers[i].contains("\t"))
answers[i-1] = answers[i-1] "\n\t" answers[i];
String[] answersFinal = Arrays.copyOf(answers, answers.length-1);
for (int i = 0; i < answersFinal.length; i )
answersFinal[i] = answers[i];
for (String s : answersFinal)
System.out.println(s);
但是,這不是一個好的解決方案,我建議重新格式化您的輸入以包含可用于拆分輸入的特殊字符序列,例如:
String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
input = input.replaceAll("\n\t", "%%%").replaceAll("%%%\t", "\n\t\t");
然后用'%%%'分割輸入,你會得到你想要的輸出。
但是同樣,這在很大程度上取決于您希望它的通用程度,最好的解決方案是使用整體不同的方法來實作您想要的,但我無法提供它,因為我沒有足夠的資訊來了解您正在開發的內容。
uj5u.com熱心網友回復:
你可以簡單地做:
String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
String[] modifiedInput = input.replaceAll("\n\t\t", "####").replaceAll("\n\t", "§§§§").replaceAll("####", "\n\t\t").split("§§§§");
- 替換包含 \n\t 的每個 \n\t\t
- 替換每個\n\t
- 改回 \n\t\t,因為您似乎想保留它
- 進行拆分。
效率不高,但如果您不會在大量資料情況下使用它,它仍然可以足夠快地作業。
這種方法更有效,因為它只使用 2 個拆分,但僅當只有一個元素以 \n\t\t 結尾時才有效。訪問一個陣列是一種廉價的 O(1) 所以恒定的時間。更多的代碼但更少的完整迭代(replaceAll、split)。
final String input = "dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext";
final String[] s1 = input.split("\n\t\t");
final String last = s1[s1.length - 1];
final String[] modifiedInput = s1[0].split("\n\t");
modifiedInput[modifiedInput.length -1] = modifiedInput[modifiedInput.length -1] "\n\t\t" last;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334526.html
