#java #regex
#java — язык #регулярное выражение #java
Вопрос:
Pattern pattern = Pattern.compile("([^\d.]|[\d.] )");
String[] equation = pattern.split("5 3--323");
System.out.println(equation.length);
Я пытаюсь разделить числа (могут быть группами) и ненумерованные, в этом примере я надеялся на массив размером 6:
5, , 3, -, -, 323
как я могу это сделать?
Комментарии:
1. Разве вы не пытаетесь разобрать математическое выражение ?
Ответ №1:
Попробуйте использовать matcher, как в примере ниже. Это возвращает именно то, что вам нужно.
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MathSplitTest
{
public static void main(String[] args)
{
Pattern pattern = Pattern.compile("[0-9] |[- ]");
String string = "5 3--323";
Matcher matcher = pattern.matcher(string);
while(matcher.find())
System.out.println("g0=" matcher.group(0));
}
}
Комментарии:
1. есть больше, чем просто — и , но было достаточно легко добавить другие, и это дает мне то, что я искал. Спасибо
2. @smerny Приятно слышать, что это решает вашу проблему. Да, я знаю, например, есть еще как минимум две операции / *
Ответ №2:
Как насчет использования
new java.util.Scanner(new java.io.StringReader("5 3--323"));
вместо этого?
http://download.oracle.com/javase/6/docs/api/java/util/Scanner.html
Ответ №3:
Если ваши числа разделены запятыми, сначала обозначьте строку;
tok = new StringTokenizer(string, ",");
затем попробуйте создать число из каждого токена. Если это не число, то это символ:
while (tok.hasMoreTokens()){
String tok = tok.nextTok();
try {
new Integer(tok);
}catch (NumberFormatException e){
}
}
Если tok не является числом, то генерируется исключение NumberFormatException.