我正在使用eclipse for java。
我想从用户分割输入行而不会丢失任何字符。
例如输入行是:+2+ sqrt(25 )-41*3- abs(-4)-62 /2
输出应为:+2,+sqrt(25),-41,*3,-abs(-4),-62,/2
(如果我用“+”等分开,则字符“+”本身将被删除。)
我该怎么办?
我的代码是这样的:
Scanner scanner=new Scanner(System.in);
String str= scanner.nextLine();
String[] parts;
parts = str.split("!?!?!!?!"); // i don't know what to put here
答案 0 :(得分:0)
您可以使用Java中的正则表达式来执行此操作,假设您不能使用嵌套括号(这是非常必要的)
List<String> parts = new ArrayList<String>();
String input = "+2+ sqrt(25 )-41*3- abs(-4)-62 /2";
Pattern p = Pattern.compile("[\\+\\-/\\*][^\\+\\-\\*/\\(]+(\\([^\\(\\)]*\\))?");
Matcher m = p.matcher(input);
while (m.find()) {
parts.add(m.group());
}
如果你想要一个你不能做的阵列:
parts.toArray(new String[parts.size()]);
这将为您提供一个简单的String数组。我正在使用Java Collections来处理数组创建,因为在解析String之前无法知道数组的大小
关于这个正则表达式的解释:
[\\+\\-/\\*]
查找运营商标志
[^\\+\\-\\*/\\(]+
查找除运算符和左括号之外的所有内容
(\\([^\\(\\)]*\\))?
查找没有嵌套括号的括号内容
此代码给出:
+2
+ sqrt(25 )
-41
*3
- abs(-4)
-62
/2
如果你需要嵌套的括号,那么你需要实现一个Parser,我让你谷歌吧。