2017-12-03 220 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];