Java:解析以逗号分隔的输入

时间:2016-04-11 20:18:07

标签: java input

Java程序:

下面的输入正好偏离我的脑海。我正在寻找的是如何根据输入数据的字符串或原始类型来获取输入数据的特定部分......在这里我认为使用以某种方式将它们分开的逗号可能是有用的。

   /* Given input:
   *
   * Massachusetts, Ma, Boston, 10000, 20000
   * California, CA, Los Angeles, 30000, 40000

   * How would you print:

   * Massachusetts    20000
   * California       40000
   */

public static void main(String[] args) {
     Scanner userInput = new Scanner(System.in) ;

     while (userInput.hasNextLine()) {
         String state = userInput.nextLine() ;
         Double population = userInput.nextDouble() ;
         String temp = userInput.nextLine() ; // for the new line

         System.out.printf( "%s %2f" , state , population ) ;
     }
}

另外我见过一个名为useDelimiter()的方法,我想知道这是否有助于打破扫描仪的输入。

4 个答案:

答案 0 :(得分:0)

给定字符串Massachusetts, Ma, Boston, 10000, 20000,您可以使用split来获取数组[Massachusetts, Ma, Boston, 10000, 20000](请注意,这不再是字符串)

String input = "Massachusetts, Ma, Boston, 10000, 20000";
String[] fields = input.split(", ?");
String state = fields[0];
String xx = fields[4];
System.out.println(state+", "+xx); // Massachusetts, 20000

请注意,正则表达式, ?表示逗号,后跟或不是空格。此外,由于这将是用户输入,您应该检查fields数组是否具有所需的长度(在这种情况下,由于您访问第4个字段,长度应该至少为5)

我想您可以轻松地调整此示例中的代码;)

答案 1 :(得分:0)

一种解决方案是使用Regex。

Pattern p = Pattern.compile("([A-z]+), ([A-z]{2}), ([A-z]+), (\\d+), (\\d+)");
String line = userInput.nextLine();
Matcher lineMatcher = p.matcher(line);
if (lineMatcher.matches()) {
    System.out.println(lineMatcher.group(0)); //prints Massachusetts
    System.out.println(lineMatcher.group(1)); //prints Ma
    System.out.println(lineMatcher.group(2)); //prints Boston
    System.out.println(lineMatcher.group(3)); //prints 10000
    System.out.println(lineMatcher.group(4)); //prints 20000
}

答案 2 :(得分:0)

如果我正确理解您的问题并且您的输入是String类型,则可以使用此方法:

public String [] split(String regex),你的正则表达式是","。

它会返回一个String []。您可以使用索引单独打印每个值,并使用Float.parseFloat(字符串值)将字符串转换为浮点类型。

    String userInput = "Massachusetts, Ma, Boston, 10000, 20000";

    userInput = userInput.replaceAll("\\s+", ""); //replaces whitespace
    String[] values = userInput.split(",");

    System.out.println(values[0]);
    System.out.println(values[4]);

    String state = values[0];

    // you probably do not want a float for population
    float population = Float.parseFloat(values[4]);
    System.out.printf( "%s %2f" , state , population );

    // you probably want an integer, so try this
    int integerPopulation = Integer.parseInt(values[4]);
    System.out.printf( "%s %2d" , state , integerPopulation);

答案 3 :(得分:0)

提供您可以进行更改的代码:

String[] temp = new String[5]; 
while (userInput.hasNextLine()) {
     String input = userInput.nextLine();
     temp[] = input.split(",");
     System.out.printf( "%s %s" ,temp[0] , temp[4] ) ;
 }

当您调用nextLine()时,您可以获得该输入的整行。从逗号分割()并将其存储到临时数组中。然后根据您的要求打印这些值。如果需要进行任何计算,可以将temp数组中的数据类型转换为值。

您可以使用以下行将字符串值转换为float:

Float.valueOf(temp[4]);