Scanner input = new Scanner(System.in);
String girdi = input.nextLine();
for(int i=1; i<girdi.length(); i+=1){
if(girdi.charAt(i) == '*'){
int temp1= girdi.charAt(i-1)-'0';
int temp2= girdi.charAt(i+1)-'0';
int temp3 = temp1 * temp2;
String a = girdi.substring(i-1,i);
String b = "" + temp3;
String a2 = girdi.substring(i+1,i+2);
String b2 = girdi.substring(i , i+1);
girdi = girdi.replaceFirst(a,b);
girdi = girdi.replaceFirst(b2, "");
girdi = girdi.replaceFirst(a2, "");
}
}我只是想做乘法
当我键入类似于(3*5)的内容时,请给我一个错误:
线程"main“java.util.regex.PatternSyntaxException中的异常:在索引0附近悬挂元字符'*‘
当我用回扣逃跑时:
if(s.charAt(i) == '\\*'){ 我看到未闭字符文字和表达式错误的非法开始。
我该怎么办?
发布于 2016-11-18 22:29:16
参考String.replaceFirst的Javadoc
*这样的字符具有特殊的意义);\和$)。如果要从不受信任的源传入字符串(如用户输入),则需要适当地引用它们:
girdi = girdi.replaceFirst(Pattern.quote(a), Matcher.quoteReplacement(b));然而,String.replaceFirst并不是这个工作的合适工具。如果在您真正要寻找的字符串之前有匹配的搜索字符串,则它将无法正常工作。
对代码的最直接的修改是使用String.substring --您确切地知道要替换的东西在哪里,所以请使用这些信息:
girdi = girdi.substring(0, i-1) + temp3 + girdi.substring(i+2);
i (这将取代循环中的最后7行)
您可以通过使用StringBuilder再次更好地做到这一点,以避免在循环中创建不必要的字符串。
然而,在数位数或负数的情况下,这种情况仍然行不通。
https://stackoverflow.com/questions/40686543
复制相似问题