我想将字符串以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