Java 无法检测空格或标点符号

Java 无法检测空格或标点符号,java,Java,代码基本上是abc123到abc246的翻倍。现在这里的问题是,它不会检测空格或标点符号,它会给我一个错误,行int i=Integer.parseInt(句子);。有什么想法吗?谢谢 编辑:此代码要求用户通过扫描仪输入句子 else { String woah = sentence; sentence = sentence.replaceAll("\\D", ""); int i = Int

代码基本上是abc123到abc246的翻倍。现在这里的问题是,它不会检测空格或标点符号,它会给我一个错误,行int i=Integer.parseInt(句子);。有什么想法吗?谢谢

编辑:此代码要求用户通过扫描仪输入句子

        else
        {
            String woah = sentence;
            sentence = sentence.replaceAll("\\D", "");
            int i = Integer.parseInt(sentence);
            int j = i * 2 ;
            woah = woah.replaceAll("" + i, "" + j);
            System.out.println(woah);
        }
更简单的方法:

StringBuilder woah = new StringBuilder();
StringBuilder number = new StringBuilder();
for(int i = 0; i < sentence.length(); i++) {
   char c = sentence.charAt(i);

   if(Character.isDigit(c)) {
      number.append(c);
   } else {
      woah.append(c);
   }

   woah.append(Integer.parseInt(number.toString()) * 2);

   System.out.println(woah.toString());
}
StringBuilder woah=new StringBuilder();
StringBuilder编号=新的StringBuilder();
for(int i=0;i<句子长度();i++){
char c=句子charAt(i);
if(字符isDigit(c)){
编号。附加(c);
}否则{
附加(c);
}
append(Integer.parseInt(number.toString())*2);
System.out.println(woah.toString());
}

不确定正则表达式(“\D”)为什么不适合您,它适合我。或者,您可以尝试使用下面的正则表达式

    sentence = sentence.replaceAll("[^0-9]", "");

正则表达式是实心的,应该删除所有非数字字符。只有当字符串中没有数字时,该行才会引发异常。这让我相信你在获取信息时犯了一个错误


您是使用
Scanner.nextLine
进行输入,还是使用
Scanner.next
?如果不使用分隔符,则应使用前者。

对于“foo888”,所需的结果应该是什么?“\\D”是什么?如果你想让它是空格,为什么不直接写“?\\D所有的非数字都很好创建一个包含所有字符(标点符号和空格)的字符串,你需要检查并遍历它?当
语句
foo888
时,这会打印
foo161616
而不是
foo1766
。对不起,误解了你想要的。编辑了我的答案。关键是你不需要使用正则表达式。我的上帝先生,你是个天才。非常感谢你。编辑:在我修复后,我看到了另一个问题。如果我在不同的部分输入整数,例如1woah1,输出将保持与输入相同。您的代码没有考虑分开的整数。我猜您希望它输出
2woah2
?一个建议是将解析行替换为
句子。replaceAll(\\D',”)这样您就只有空格和数字了。然后删去句子。然后通过这个正则表达式
.replaceAll(“\\s+”,”)运行它这样就不会有多个空格。现在使用
语句拆分。拆分(“”)。现在有了一个字符串形式的整数数组。可以循环遍历该数组,并将每个整数加倍。然后技巧是将新的双整数放入原始字符串中。