在Java中使用扫描器忽略字符

在Java中使用扫描器忽略字符,java,java.util.scanner,Java,Java.util.scanner,我想取多个坐标点,比如(35,-21)(55,12)。。。从标准输入,并将它们放入各自的数组中 让我们称它们为x[]和y[] x[]将包含{35,55,…},y[]将包含{-21,12,…}等等 然而,我似乎找不到绕过括号和逗号的方法 在c中,我使用了以下内容: for(i = 0; i < SIZE; i++) { scanf("%*c%d%*c%d%*c%*c",&x[i],&y[i]); } for(i=0;i

我想取多个坐标点,比如(35,-21)(55,12)。。。从标准输入,并将它们放入各自的数组中

让我们称它们为x[]和y[]

x[]将包含{35,55,…},y[]将包含{-21,12,…}等等

然而,我似乎找不到绕过括号和逗号的方法

在c中,我使用了以下内容:

for(i = 0; i < SIZE; i++) {
    scanf("%*c%d%*c%d%*c%*c",&x[i],&y[i]);
}
for(i=0;i
然而,在Java中,我似乎找不到绕过非数字字符的方法

我目前在Java中有以下内容,因为我被卡住了

double[] x = new double[SIZE];
double[] y = new double[SIZE];
Scanner sc = new Scanner(System.in);

for(int i=0; i < SIZE; i++) {
    x[i] = sc.nextDouble();
}
double[]x=新的double[SIZE];
双精度[]y=新双精度[尺寸];
扫描仪sc=新的扫描仪(System.in);
对于(int i=0;i
因此,问题是: 从扫描仪读取双精度字符时,如何忽略字符

快速编辑:

我的目标是在用户输入时保持严格的语法(12,-55),并能够输入多行坐标点,例如:

(1,1) (2,2) (3,3) …

nextDouble()
尝试从输入中获取一个双倍数字。它只是而不是意味着解析输入流,并通过本身来计算如何解释该字符串以某种方式提取数字


从这个意义上说:单靠扫描仪根本不起作用。您可以使用-或使用
scanner.next()
返回完整字符串;然后进行手动拆分/解析,或者您转向执行此操作。

为了提高可读性,我将分多个步骤进行此操作。首先是系统。在使用扫描仪检索时,然后分割以分别获取每组坐标,然后您可以在以后处理它们,无论出于何种目的

类似于此:

Scanner sc = new Scanner(System.in);
String myLine = sc.nextLine();

String[] coordinates = myLine.split(" ");
//This assumes you have a whitespace only in between coordinates 

String[] coordArray = new String[2];
double x[] = new double[5];
double y[] = new double[5];
String coord;

for(int i = 0; i < coordinates.length; i++)
{
  coord = coordinates[i];
  // Replacing all non relevant characters
  coord = coord.replaceAll(" ", "");
  coord = coord.replaceAll("\\(", ""); // The \ are meant for escaping parenthesis
  coord = coord.replaceAll("\\)", "");
  // Resplitting to isolate each double (assuming your double is 25.12 and not 25,12 because otherwise it's splitting with the comma)
  coordArray = coord.split(",");
  // Storing into their respective arrays
  x[i] = Double.parseDouble(coordArray[0]);
  y[i] = Double.parseDouble(coordArray[1]);
}
Scanner sc=新扫描仪(System.in);
字符串myLine=sc.nextLine();
字符串[]坐标=myLine.split(“”);
//这假定只有在坐标之间有空格
String[]coordArray=新字符串[2];
双x[]=新双[5];
双y[]=新双[5];
弦坐标;
对于(int i=0;i
请记住,假设严格遵守输入字符串的格式,这是一个基本解决方案


请注意,我实际上无法完全测试它,但应该只剩下一些简单的解决方法。

提到用户输入严格限制为(12,-55)或(1,1)(2,2)(3,3)。。。设置以下代码的格式很好

    Double[] x = new Double[5];
    Double[] y = new Double[5];

    System.out.println("Enter Input");
    Scanner scanner = new Scanner(System.in);
    String input = scanner.nextLine();
    input = input.trim();

    int index = 0;

    while(input != null && input != "" && input.indexOf('(') != -1) {
        input = input.trim();
        int i = input.indexOf('(');         
        int j = input.indexOf(',');
        int k = input.indexOf(')');
        x[index] = Double.valueOf(input.substring(i+1, j));
        y[index] = Double.valueOf(input.substring(j+1, k)); 
        System.out.println(x[index] + " " + y[index]);
        input = input.substring(k+1);           
        index++;            
    }
在这里,我得到了字符串格式的用户输入,然后对其调用trim方法来删除前导和尾随空格

在while循环中,'(“”、“之间的子串被纳入x[],而'、“”)之间的子串被纳入y[]

在循环中,索引将递增,输入字符串将在第一次出现“)”后修改为子字符串,直到字符串结束


重复循环,直到没有出现”)或输入为空。

输入是否需要强制括号???使用
Scanner#nextLine()
将输入读取为字符串。是的,我希望以强制(12,-65)语法保留输入。请注意,要使用的格式是
(1,1)(2,2)(3,3)
,因此理想情况下,分割的字符串应该是resplite。当然,但一旦分割好字符串,就可以删除空格、括号和逗号,然后将它们存储到各自的数组中。这可能不是最干净的方法,但如果不使用look aheads或look behinds的复杂regexp,这可能是最简单的方法。对于将java作为一个辅助项目学习,我认为这是有意义的;要删除剩余的非数字字符?传入数组列表,循环拆分每个个体,并按该方法将其排序为各自的数组,然后返回main?@Paul No。在internet上键入String split以获取文档,他们有一些非常好的示例。使用Mumrau-answer(编辑之前),您将得到一个类似于
[0]->(1,1),[1]->(2,2)
的Stings数组。因此,要获取坐标,您需要在之后使用类似于
String[]coord=coordinates[i]的东西对其进行解析;double c1=double.parseDouble(coord[0]);double c2=double.parseDouble(coord[1])(括号被忽略)。谢谢,这很有帮助!在这种情况下,使用
索引似乎很牵强。