2017-12-03 384 views
0

我想讓字符串分開,而不是逗號。 我們還沒有學過類似數組的東西,這是一個介紹類。 我在這裏找到的所有東西只是不斷給我錯誤或對zybooks中的代碼無所作爲。家庭作業解析字符串:從字符串中刪除逗號(java zybooks)

import java.util.Scanner; 
public class ParseStrings { 
    public static void main(String[] args) { 



    Scanner scnr = new Scanner(System.in); // Input stream for standard input 
    Scanner inSS = null;     // Input string stream 
    String lineString = "";    // Holds line of text 
    String firstWord = "";     // First name 
    String secondWord = "";    // Last name 
    boolean inputDone = false;    // Flag to indicate next iteration 


    // Prompt user for input 
    System.out.println("Enter input string: "); 


    // Grab data as long as "Exit" is not entered 
    while (!inputDone) { 


     // Entire line into lineString 
     lineString = scnr.nextLine(); 


     inSS = new Scanner(lineString); 


     firstWord = inSS.next(); 

     lineString.split(","); 

     // Output parsed values 
     if (firstWord.equals("q")) { 
      System.out.println("Enter input string: "); 

      inputDone = true; 
     } 
      //This may be where I am messing up?? 
     else if (lineString.contains(",")) { 

      secondWord = inSS.next(); 


      System.out.println("First word: " + firstWord); 
      System.out.println("Second word: " + secondWord); 

      System.out.println(); 


     } else { 

      System.out.println("Error: No comma in string"); 
      System.out.println("Enter input string: "); 

     } 
    } 


    return; 
    } 
} 

我的地方搞亂了,並不斷收到不同的錯誤代碼,因爲我跟上它搞亂......

「輸入輸入字符串:
第一個字:小杰,
第二個字:艾倫」

當它應該是

「輸入輸入字符串:
第一個字:吉爾
第二個字:艾倫」

然後還作爲計算機進入更多的數據,我開始收到此消息:

「線程中的異常」main java.util.NoSuchElementException「
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Sca nner.next(Scanner.java:1371)
在ParseStrings.main(ParseStrings.java:44)」

+0

你還沒有了解數組,但'lineString.split(「」)'創建一個數組,你只是做與它無關 –

+0

是啊,我試圖尋找在工地附近嘗試找到一個解決方案,它完全沒有工作... ha –

回答

0

可能性之一(如果你沒有了解陣列)是使用StringBuilder和刪除逗號或簡單地循環輸入字符串,如果字符在我們說的索引8是逗號,你做yourString.substring(0,8);,然後打印第二個字作爲yourString.substring(10,yourstring.length);我在第二個子字符串中放置了起始索引10,因爲您想跳過逗號和分隔名和姓的空格。下面是代碼示例使用無非是String類,它的方法和循環:

package com.company; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     System.out.print("Enter first name and last name: "); 
     String str = in.nextLine(); 

     int indexOfComma = 0; 

     for (int i = 0; i < str.length(); i++) { 
      if (str.charAt(i) == ',') 
       indexOfComma = i; 
     } 

     System.out.println("First name is: " + (str.substring(0, indexOfComma))); 
     System.out.println("Last name is: " + (str.substring(indexOfComma + 2, str.length()))); 

    } 
} 

或者像我看你嘗試使用分裂()(但既然你說你沒有學到陣列但我張貼上述方案),你可以用.split()這樣做:

package com.company; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     System.out.print("Enter first name and last name: "); 
     String[] name = in.nextLine().split(", "); 

     System.out.println("First name is: " + name[0]); 
     System.out.println("Last name is: " + name[1]); 

    } 
} 

而且,這裏是StringBuilder類的例子:

package com.company; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     Scanner in = new Scanner(System.in); 
     System.out.print("Enter first name and last name: "); 
     StringBuilder name = new StringBuilder(in.nextLine()); 

     name.deleteCharAt(name.indexOf(",")); 

     System.out.println("Full name is: " + name); 

    } 
} 
+0

我仍然在線程「主要」......異常,但錯誤? –

+0

您不需要循環查找逗號。嘗試'indexOf' –

+0

我在另一個例子中使用了索引,我試圖顯示不同的變化。 – prsvr

0

所以,讓我們採取最低限度的措施。 我們需要爲此使用一些Java額外的庫(如掃描儀):

我們需要一個arrayList,因爲我們不知道我們要將字符串拆分成多少個元素。

我們需要一個數組從String接口到ArrayList<String>

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Scanner; 
public class Main 
{ 
    public static void main(String[] args) 
    {  

     Scanner scan = new Scanner(System.in); 

     //Get the inputs: 
     System.out.println("Enter a String: "); 
     String one = scan.nextLine(); 
     System.out.println("Enter a second String: "); 
     String two = scan.nextLine(); 
     //Concatenate (join up) the two inputs with a `,` delimeter 
     String three = one + "," + two;  

     // Now we split up the entire thing based on a separator of `,`: 
     ArrayList<String> parts = new ArrayList<>(Arrays.asList(three.split(","))); 

     //Print every word we separated: 
     for(String s: parts) { 
      System.out.println(s); 
     } 
     //System.out.println(parts.get(0)); 
    } 
} 

你用,分離這將打印出每個單詞,並會刪除逗號表示(,)。

希望這有助於。

+0

我仍然不斷收到線程「主」....異常的異常? –

+0

@ShaunaLindseyOlson我添加了一條評論,向您展示如何訪問部件ArrayList的一個元素。 – Artemis

+0

@ShaunaLindseyOlson 你已經聲明瞭一個掃描器,從字符串中尋找輸入。 你不能(在這種情況下,你可以但不應該)從cast-String輸入中聲明一個掃描器。 你應該使用我的解決方案,並改變你從arrayList'parts'訪問你想要的單詞的方式。 您的程序當前要求輸入。 如果輸入有逗號, 然後它會要求輸入FROM YOUR LAST INPUT,而不是從控制檯 - 您不能這樣做。這就是爲什麼沒有找到元素,因爲這是非法操作。 – Artemis

0

當掃描器讀取所有的數據,如調用nextLine方法,而且也沒有行...或下一個方法時,你沒有把空格,逗號

後,默認情況下你的錯誤發生時,掃描儀使用空格作爲分隔符。如果你想要的任何空格前加一個逗號分隔符,你可以試試這個

Scanner sc=new Scanner(System.in); 
sc.useDelimiter(",?\\s+"); 

現在,sc.next()將宣讀Hello, WorldHello,並給它的第二個電話應該返回World

或者你可以使用數組所做

String[] words = lineString.split(","); 
String first = words[0]: 
String second = words[1];