我想將字符串以EADGBE或DADF#AD的形式拆分爲單獨的字符串,每個字符串都包含一個字母或一個字母加上#號。有沒有更好的方法比用蠻力的方式迭代字符串更好?在Java中分割非分隔字符串的好方法是什麼?
String.split顯然依賴於分隔符,然後將其丟棄,這對我來說根本沒有多大用處 - 幾分鐘後,我認爲split("[a-gA-G]#?");
即將起作用,但是不會,這對於所有 - 我幾乎想要相反...
我想將字符串以EADGBE或DADF#AD的形式拆分爲單獨的字符串,每個字符串都包含一個字母或一個字母加上#號。有沒有更好的方法比用蠻力的方式迭代字符串更好?在Java中分割非分隔字符串的好方法是什麼?
String.split顯然依賴於分隔符,然後將其丟棄,這對我來說根本沒有多大用處 - 幾分鐘後,我認爲split("[a-gA-G]#?");
即將起作用,但是不會,這對於所有 - 我幾乎想要相反...
蠻力很可能是你的最佳選擇,無論是在代碼和性能方面。
或者,你可以使用一個Matcher
Pattern p = Pattern.compile("[a-gA-G]#?");
Matcher m = p.march(inputString);
List<String> matches = new ArrayList<String>();
while(m.find())
matches.add(m.group());
啊,非常好 - 我的搜索引擎沒有發現關於Matchers的任何事情!感謝那。 :) – Oolong 2012-03-17 23:42:21
如果你預見在格局的變化,你可以使用:
String s = "DADF#AD";
Pattern p = Pattern.compile("([a-gA-G]#?)");
Matcher matcher = p.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group());
}
使用前瞻和回顧後作品:String regex = "(?<=.)(?=\\w#?)";
例如,
import java.util.Arrays;
public class Foo {
public static void main(String[] args) {
String[] tests = {"EADGBE", "DADF#AD"};
String regex = "(?<=.)(?=\\w#?)";
for (String test : tests) {
System.out.println(Arrays.toString(test.split(regex)));
}
}
}
返回:
[E,A,d,G,B,E]
[d,A,d,F#,A,d]
'String regex =「(?=(?!^)\\ w#?)」;',你去了。 – 2012-03-17 22:29:29
@refp:這看起來也可以工作 - 防止捕捉行開始。華而不實,謝謝! – 2012-03-17 22:31:15
啊......我不知道這是一個選項!也許不是最友好的技術 - 或者我的意思是說新手友好 - 但是要知道這是你可以用Java中的正則表達式做的事。謝謝! – Oolong 2012-03-17 23:48:59
怎麼樣:添加定界符,然後分裂:
這種方法增加了分隔符
private static String delimit(String in) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < in.length()-1; i++) {
sb.append(in.charAt(i));
if (in.charAt(i+1) != '#')
sb.append(';');
}
return sb.toString();
}
要使用它:
String[] notes = delimit("DADF#AD").split(";");
你可以舉一個你想分割的字符串的例子嗎? – chandsie 2012-03-17 22:09:28
恐怕你不得不採取蠻力的方法 – mac 2012-03-17 22:11:07
這很簡單。去蠻力。不要增加正則表達式的複雜性和概覽。 – 2012-03-17 22:38:22