Проблема Java String.split при попытке разбиения на String. ( "\\?" );
Итак, у меня есть строка, которая выглядит так:
Какой-то текст здесь?
и мне нужно разбить их, я использую string.split( "\\?" )
но если у меня есть строка вроде этого:
Это строка с запятой 1234567
Я тоже разделился в запятой. ""
И если у меня есть эта строка:
Это проблема? 123456
Он также разбивается на ""
Итак, как я могу это исправить?
Ответы
Ответ 1
Я не вижу такого поведения: (и я не ожидал)
String s ="hello?1000";
String[] fields = s.split("\\?");
for (String field : fields) {
System.out.println(field);
}
дает:
Привет
1000
Вводя запятую "," или апостроф "", не имеет никакого отношения к расколу:
String s ="he,llo?1000";
дает:
он, LLO
1000
String s ="he'llo?1000";
дает:
he'llo
1000
Пролитый также отлично работает, если у вас есть пробелы в строке ввода. Я могу только предположить, что ваше регулярное выражение не так, как вы думаете!
Ответ 2
Может быть, вам нужно использовать '\\\?' (удалить пробелы)
Извините, не можете проверить его сейчас.
Надеюсь, что это поможет.
Ответ 3
Похож на типичную проблему с регулярным выражением
IAm, используя это для exmaple для разделения
имя (код)
в пару с именем и кодом отдельно:
RE regex = new RE("(.*) \\W(.*)\\W");
if(!regex.match(term)){
throw new InvalidArgumentException("the given term does not match the regelar expression:'NAME (ID)'");
}
Pair<String,String> pair=new Pair<String,String>(regex.getParen(1),regex.getParen(2));
return pair;
Ответ 4
это разрешение: (EDIT: он даже симплеер)
public static Pair<String,String> getSplittedByQuestionMark(String term){
String[] list=term.split("[?]");
return new Pair<String,String>(list[0],list[1]);
}
i протестировал его:
@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()));
}
}
[EDIT после замечания ниже] Я добавил тест. Теперь я не вижу, что проблема, это работает (и еще более симпель):
@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()));
}
}