Java 如何获取以+,-,*,/开头的最后一个子字符串?

Java 如何获取以+,-,*,/开头的最后一个子字符串?,java,algorithm,Java,Algorithm,如果我在一个字符串变量中有表达式,比如20+567-321,那么如何从中提取最后一个数字321,其中运算符可以是+,-,*,/ 如果字符串表达式仅为321,我必须得到321,这里表达式中没有运算符您可以根据运算符拆分字符串,如下所示: String[] result = myString.split("[-+*/]"); [+|-|*|/]是一个正则表达式,用于指定字符串拆分的起点。这里,result[result.length-1]是您所需的字符串 编辑 正如@ElliotFrisch所建议

如果我在一个字符串变量中有表达式,比如20+567-321,那么如何从中提取最后一个数字321,其中运算符可以是+,-,*,/


如果字符串表达式仅为321,我必须得到321,这里表达式中没有运算符

您可以根据运算符拆分字符串,如下所示:

String[] result = myString.split("[-+*/]");
[+|-|*|/]是一个正则表达式,用于指定字符串拆分的起点。这里,result[result.length-1]是您所需的字符串

编辑 正如@ElliotFrisch所建议的,在指定正则表达式时,我们需要在正则表达式中转义-in。因此,以下模式也应该起作用:

String[] result = myString.split("[+|\\-|*|/]");
以下是需要转义的字符列表


这似乎是学习编程和算法的任务,而且我怀疑在只需要最后一个子串的情况下使用正则表达式进行拆分是否有效

从末尾开始,迭代到字符串长度乘以。 声明一个空字符串并说出结果 循环时,如果找到了这些运算符中的任何一个,则返回结果,否则将遍历的字符置于字符串结果之前。 返回结果 这里假设没有空格,字符串只包含数字和算术运算符


[+-/*]是一个正则表达式,它只匹配我们在方括号内提供的字符。我们将根据这些字符进行拆分。

如果您想使用StringTokenizer进行拆分:

 public static void main(String args[])

{
   String expression = "20+567-321";
   StringTokenizer tokenizer = new StringTokenizer(expression, "+-*/");
   int count = tokenizer.countTokens();
   if( count > 0){
       for(int i=0; i< count; i++){
           if(i == count - 1 ){
               System.out.println(tokenizer.nextToken());
           }else{
               tokenizer.nextToken();
           }
       }
   } 
}

回想一下,您可以在StringTokenizer中指定多个分隔符。

我需要字符串[]结果=myString.split[+|-|*|/];对于负号,返回的结果不正确-例如87-1,结果为87-1,但结果应为1@raxx请确保使用相同的字符表示-。您可能在表达式和代码中使用了不同的字符。@raxx请立即检查。我已经更新了答案。我已经测试过了,它正在工作。这是我测试它的链接。jdoodle.com/a/7uQ@ElliottFrisch根据你的建议,你的模式应该在87-1中起作用,但它给出的输出是相同的。有什么原因吗?
 public static void main(String args[])

{
   String expression = "20+567-321";
   StringTokenizer tokenizer = new StringTokenizer(expression, "+-*/");
   int count = tokenizer.countTokens();
   if( count > 0){
       for(int i=0; i< count; i++){
           if(i == count - 1 ){
               System.out.println(tokenizer.nextToken());
           }else{
               tokenizer.nextToken();
           }
       }
   } 
}