如果表达式的值为0到9但
,则生活非常简单如果用户输入了expression = 23 + 52 * 5,那么我将它带入一个名为expression的字符串。
现在我想要的是一个新的String或char数组,其方式是:
String s or char[] ch = ['23','+','52','*','5']
以便ch [0]或s.charAt(0)给我23 而不是2 。
为此,我尝试了以下操作,并坚持下一步该做什么:
for(int i=0;i<expression.length();i++)
{
int operand = 0;
while(i<expression.length() && sol.isOperand(expression.charAt(i))) {
// For a number with more than one digits, as we are scanning
// from left to right.
// Everytime , we get a digit towards right, we can
// multiply current total in operand by 10
// and add the new digit.
operand = (operand*10) + (expression.charAt(i) - '0');
i++;
}
// Finally, you will come out of while loop with i set to a non-numeric
// character or end of string decrement it because it will be
// incremented in increment section of loop once again.
// We do not want to skip the non-numeric character by
// incrementing it twice.
i--;
/**
* I have the desired integer value but how to put it on a string
* or char array to fulfill my needs as stated above.
**/
// help or ideas for code here to get desired output
}
在while循环中,如果提供的char为isOperand(char)
或>=0
,则方法<=9
返回一个布尔值true。
答案 0 :(得分:4)
当你将表情分开时,你会想要String[]
。正则表达式lookbehind / lookahead(Java Pattern Reference)允许您拆分字符串并保留分隔符。在这种情况下,您的分隔符是操作数。您可以使用这样的拆分模式:
public static void main(String[] args) throws Exception {
String expression = "23+52*5";
String[] pieces = expression.split("(?<=\\+|-|\\*|/)|(?=\\+|-|\\*|/)");
System.out.println(Arrays.toString(pieces));
}
结果:
[23, +, 52, *, 5]
要考虑的一个问题是,如果你的表达式包含任何空格,那么在将表达式拆分之前你将要删除它们。否则,空格将包含在结果中。要从String.replaceAll()
中删除表达式中的空格,请执行以下操作:
expression = expression.replaceAll("\\s+", "");
“\\s+
”是一个正则表达式模式,表示空格字符:[\ t \ n \ x0B \ f \ r]。该语句将所有空格字符替换为空白空格,基本上将其删除。
答案 1 :(得分:1)
尝试使用开关案例:
//读取第一个字符 切换数据 如果数字:它是什么(0,1,2,3 ...?) 保存号码 如果它是一个运营商 保存运营商 ** 2交换机有4个用于操作员,10个用于数字**
//读下一个字符 再次切换 如果它是一个数字后面的数字将两个字符添加到字符串中 如果它是一个运营商&#34;关闭&#34;数字字符串并将其转换为int
如果您需要一些代码,我将很乐意为您提供帮助。 希望答案很有用。
for i = 1 ; i = string.length
switch :
case 1,2,3,4,5,6,7,8,9,0 (if its a digit)
x(char) = char(i)
case +,-,*,/ (operator)
y(char) = char(i)
x[1] + x[2] +...x[n] = X(string) // build all the digits saves before the operator into 1 string
convert_to_int(X(string))
答案 2 :(得分:1)
String expr = "23+52*5";
String[] operands = expr.split("[^0-9]");
String[] operators = expr.split("[0-9]+");
这将其分解为:
答案 3 :(得分:0)
您可以使用正则表达式:
\d+
将获取一个或多个连续数字的任何实例。