将字符串转换为字符串数组

时间:2013-04-29 18:33:55

标签: java arrays string infix-notation

如果我有:

Scanner input = new Scanner(System.in);

System.out.println("Enter an infixed expression:");
String expression = input.nextLine();

String[] tokens;

如何一次扫描一个标记周围的中缀表达式,从左到右并放入一个字符串数组?这里token被定义为操作数,运算符或括号符号。

示例:“3 +(9-2)”==> tokens = [3] [+] [(] [9] [ - ] [2] [)]

5 个答案:

答案 0 :(得分:2)

String test = "13 + (9-2)";

List<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("\\d+|\\(|\\)|\\+|\\*|-|/")
    .matcher(test);
while (m.find()) {
  allMatches.add(m.group());
}

有人可以测试吗?

答案 1 :(得分:0)

我认为最简单的方法是将行读入一个字符串,然后根据空格进行拆分。有一个方便的字符串函数split可以为您完成此任务。

String[] tokens = input.split("");

答案 2 :(得分:0)

对于您的示例来说可能有些过分,但如果它变得更复杂,请查看Java编译器编译器JavaCC。 JavaCC允许您基于语法定义在Java中创建解析器。

请注意,这不是一个简单的入门工具。但是,语法定义比相应的正则表达式更容易阅读。

答案 3 :(得分:0)

如果tokens []必须是String,则可以使用此

String ex="3 + (9-2)";
    String tokens[];
    StringTokenizer tok=new StringTokenizer(ex);
    String line="";
    while(tok.hasMoreTokens())line+=tok.nextToken();

    tokens=new String[line.length()];
    for(int i=1;i<line.length()+1;i++)tokens[i-1]=line.substring(i-1,i);

令牌可以是charArray所以:

String ex="3 + (9-2)";
    char tokens[];
    StringTokenizer tok=new StringTokenizer(ex);
    String line="";
    while(tok.hasMoreTokens())line+=tok.nextToken();

    tokens=line.toCharArray();

答案 4 :(得分:0)

这个(恕我直言)优雅的单行代码工作(测试):

String[] tokens = input.split("(?<=[^ ])(?<!\\B) *");

此正则表达式还适用于包含多个字符编号(例如123)的输入,这些字符编号将被拆分为单独的字符,但用于非字边界的负面后视(?<!\\B)

第一个后视(?<=[^ ])会阻止在输入时初始空白字符串拆分,并确保消耗空格。

正则表达式" *"的最后部分确保使用空格。

相关问题