嗯,有几个选择。由于您确实希望跳过“r”然后读取数字,您可以使用Scanner#skip。例如,要跳过所有非数字,请阅读数字:
Scanner sc = new Scanner("r1");
sc.skip("[^0-9]*");
int n = sc.nextInt();
如果没有前导非数字,那也可以。
另一种选择是使用非数字作为分隔符,如您所述。例如:
Scanner sc = new Scanner("x1 r2kk3 4 x56y 7g");
sc.useDelimiter("[^0-9]+"); // note we use + not *
while (sc.hasNextInt())
System.out.println(sc.nextInt());
输出六个数字:1,2,3,4,56,7。
另一种选择,取决于输入的性质,是通过提前用空格替换所有非数字来预处理字符串,然后使用默认配置的扫描程序,例如:
String input = "r1";
input = input.replaceAll("[^0-9]+", " ");
当然,你总是可以预先处理字符串以删除第一个字符,如果你知道它是那个形式,然后使用扫描仪(或只是Integer#parseInt):
String input = "r1";
input = input.substring(1);
您的工作取决于您最适合的输入。将“非数字”替换为您想要跳过的任何内容。
我不确定分隔符的作用。
此外,“分隔符”一词的定义本身是readily available。