2017-08-08 38 views
1

我想從標準輸入中獲取多個座標點,例如(35,-21)(55,12)...,並將它們放入相應的數組中。在Java中使用掃描儀忽略字符

我們稱它們爲x []和y []。

x []將包含{35,55,...}並且y []將包含{-21,12,...}等等。

但是,我似乎無法找到解決括號和逗號的方法。

在三我用的是以下幾點:

for(i = 0; i < SIZE; i++) { 
    scanf("%*c%d%*c%d%*c%*c",&x[i],&y[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(); 
} 

所以問題: 從掃描儀在雙打閱讀時我怎麼會忽略字符?

快速編輯:

我的目標是讓用戶輸入嚴格的語法(12,-55),並且能夠進入座標點,如多行:

(1,1) (2,2) (3,3) ...

+0

輸入是否需要強制括號? –

+1

使用'Scanner#nextLine()'作爲字符串讀取輸入。 –

+0

是的,我想保持強制性(12,-65)語法的輸入。 – Paul

回答

1

我會在多個步驟中提高可讀性。首先是System.in使用掃描儀進行檢索,然後進行分割以便分別獲得每組座標,然後可以稍後處理它們,以用於任何目的。

事情與此類似:

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]); 
} 

請記住,這是一個基本的解決方案假設輸入字符串的格式被嚴格遵守。

請注意,我實際上不能完全測試它,但應該只保留一些輕的解決方法。

+0

請注意格式TO是askijng是'(1,1)(2,2)(3,3)',所以你的分裂字符串應該理想地重新分割。 – Nathan

+0

當然,一旦你有分割的字符串,你可以刪除空格,括號,用逗號resplit,然後將它們存儲到它們各自的數組中。 它可能不是最簡單的方法,但它可能是最簡單的方法,不需要使用複雜的正則表達式來使用前瞻或後視。 爲了學習Java作爲一個項目,我認爲它是有道理的。 – Mumrau

+0

有了這個解決方案,myMethod將包含沿着String []座標= myLine.split(「(,)」)的內容。爲了刪除剩餘的非數字字符?傳入數組列表,循環來分割每個人,並將它們分類到它們各自的數組中,然後傳遞給main? – Paul

2

nextDouble()嘗試從輸入取雙號。這只是不是意思是解析輸入流和圖由本身如何解釋該字符串以某種方式提取一個數字。

從這個意義上說:單獨一臺掃描儀根本不能在這裏工作。您可以使用tokenizer來查找 - 或者您使用scanner.next()來返回完整的字符串;然後執行手動拆分/解析,或者轉到regular expressions來完成此操作。

0

提到用戶輸入嚴格限制爲(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++;    
    } 

在這裏,我得到了在字符串格式的用戶輸入,然後修剪方法被調用它來刪除前導和拖尾空格。

在while循環之間的子串 '('''被取入X []之間的子串 ''')'被取入ÿ []

在循環中,索引被遞增,輸入字符串在第一次出現')'後被修改爲子字符串,直到字符串結束。

循環重複,直到沒有發生')'或輸入爲空。

+0

在這種情況下使用'indexOf'似乎很牽強。 – Nathan