这是解决方案:(编辑:它更简单)
public static Pair<String,String> getSplittedByQuestionMark(String term){
String[] list=term.split("[?]");
return new Pair<String,String>(list[0],list[1]);
}
我测试过:
@Test
public void testGetSplittedByQuestionMark(){
ArrayList<String> terms=new ArrayList<String>();
ArrayList<Pair<String,String>> expected=new ArrayList<Pair<String,String>>();
terms.add("test?a");
terms.add("test?20");
terms.add("test, with comma?ab10");
expected.add(new Pair<String,String>("test","a"));
expected.add(new Pair<String,String>("test","20"));
expected.add(new Pair<String,String>("test, with comma","ab10"));
for(int i=0;i<terms.size();i++){
Pair<String,String> answer = StringStandardRegex.getSplittedByQuestionMark(terms.get(i));
assertTrue("answer="+answer.getFirst(),answer.getFirst().equals(expected.get(i).getFirst()));
assertTrue("answer="+answer.getSecond(),answer.getSecond().equals(expected.get(i).getSecond()));
}
}
[在下面的评论后编辑]我添加了一个测试,现在我不知道是什么问题,这也有效(而且更简单):
@Test
public void testGetSplittedByQuestionMarkNotUsingRegex(){
ArrayList<String> terms=new ArrayList<String>();
ArrayList<Pair<String,String>> expected=new ArrayList<Pair<String,String>>();
terms.add("test?a");
terms.add("test?20");
terms.add("test, with comma?ab10");
expected.add(new Pair<String,String>("test","a"));
expected.add(new Pair<String,String>("test","20"));
expected.add(new Pair<String,String>("test, with comma","ab10"));
for(int i=0;i<terms.size();i++){
String[] answer=terms.get(i).split("\\?");
assertTrue("answer="+answer[0],answer[0].equals(expected.get(i).getFirst()));
assertTrue("answer="+answer[1],answer[1].equals(expected.get(i).getSecond()));
}
}