2013-04-01 133 views
-1

我需要帮助将字符串分隔成单独的变量。我试图让一个程序,将得到用户输入使用nextLine()然后我需要分开该字符串中的字符。将字符串分隔成不带数组的单独变量

例如,用户可以输入行23plus或2 3 plus。

我已阅读.split,但只有在输入中有空格时才有效。我可以说,第一个数字是charAt(0),但我如何得到其余的?

+0

程序如何区分'23plus'和'23 plus'意味着'23 plus'和'23 plus'意思是'2 3 plus'? – gzm0

+0

这没有意义。鉴于输入“1234plus”,你的逻辑做了什么? '12 34 plus''1 234 plus'? –

+1

除非您知道线条的一般结构以及如何拆分线条,否则不能拆分线条。如果我们需要帮助,您需要告诉我们这些事情以及更多可能的输入和输出示例。正如你所写的,你的问题没有意义,也不应负责任。 –

回答

1

你说,这个问题是 '一个位计算器' 与后缀符号23+:

  • digits = digits.replaceAll("\\\\s","");
  • 第一个数字:int op1 = Integer.parseInt(digits.charAt(0));
  • 二位数:int op2 = Integer.parseInt(digits.charAt(1));
  • 操作:digits.charAt(2),如我建议使用+, - ,/,*,用于开关/外壳
  • 结果:5
+0

“用户可以输入行23plus或2 3加” - 这不能很好地处理第二种情况...... –

+0

“一位数字计算器”非常简单明了。 – Aubin

+0

如果在索引1处有空格,这将如何工作会有空间? –

0

如何通过焦炭循环在String char和检查,如果它是一个数字:

final List<Integer> values = new LinkedList<>(); 
    final StringBuilder operator = new StringBuilder(); 
    for (final char c : input.toCharArray()) { 
     if (Character.isDigit(c)) { 
      values.add(Integer.parseInt(Character.toString(c))); 
     } else if (!Character.isWhitespace(c)) { 
      operator.append(c); 
     } 
    } 

注:如果输入的形式为“WdigitWdigitWoperator”,其中“W”这只会工作是可选的白色空间。

但我知道你的问题就是这样。

另一种选择是使用正则表达式,这看起来是这样的:

final Pattern p = Pattern.compile("^\\s*+(?<firstDigit>\\d)\\s*+(?<secondDigit>\\d)\\s*+(?<operator>\\w++)$"); 

    final Matcher matcher = p.matcher(input); 
    if(matcher.matches()) { 
     System.out.println(matcher.group("firstDigit")); 
     System.out.println(matcher.group("secondDigit")); 
     System.out.println(matcher.group("operator")); 
    } 

如果这是一个家庭作业(我怀疑它是)这可能不是然而,可接受的解决方案。

相关问题