(Java)如何将用户输入字符串拆分为多个整数和双精度数

时间:2015-01-15 04:30:59

标签: java input

在程序中,我要求用户输入用户输入格式为:

速度12健康99力量50精度.9

然后拆分并将输入分配到多个整数和双精度(速度,健康,功率,精度),以便稍后在数学方程中使用。我该怎么做呢(分隔符等)?我已经研究过Scanner课程,但是我找不到能够在这种情况下提供帮助的东西。 我只想指出正确的方向

谢谢

3 个答案:

答案 0 :(得分:1)

public void calculate(String input){
    String[] inputAsArray = input.split(" ");


    int speed = Integer.valueOf(inputAsArray[1]).intValue();
    int health = Integer.valueOf(inputAsArray[3]).intValue();
    int power = Integer.valueOf(inputAsArray[5]).intValue();
    double accuracy = Double.valueOf(inputAsArray[7]).doubleValue();

}
//when order isn't specified and variables may be missing.
public void calculate2(String input){
    String[] inputAsArray = input.split(" ");
    HashMap<String,String> map = new HashMap<String,String>();

    for(int i = 0; i < inputAsArray.length; i+= 2){
        map.put(inputAsArray[i], inputAsArray[i+1]);
    }

    int speed = -1;
    if(map.containsKey("speed")){
        speed = Integer.valueOf(map.get("speed")).intValue();
    }
    /*
     * OTHER VARIABLES NOT SHOWN. SAME FORMAT
     */
}

答案 1 :(得分:0)

此代码从sysin扫描一行并将其转换为键值对的映射:

  Scanner sc = new Scanner(System.in);
  String input =sc.nextLine();
  Pattern p = Pattern.compile("(\\w+)\\s+(\\d*\\.*\\d*)");
  Matcher m = p.matcher(input);

  Map<String, String> map = new HashMap<>(); 
  while (m.find()) {
    map.put(m.group(1), m.group(2));
  }

希望这会对你有所帮助。

答案 2 :(得分:0)

只是为了好玩,这里的设计大纲将统计信息封装在Stats类中,并使用枚举来限制输入统计信息名称。在此示例中,我们使用扫描程序从标准输入读取统计信息。

class Example
{
    public static void main(String[] args) {
        System.out.print("Enter stats: ");
        Stats stats = new Stats();
        int statCount = Stat.values().length;
        java.util.Scanner scanner = new java.util.Scanner(System.in);
        for (int i = 0; i < statCount; i++) {
            String statName = scanner.next();
            Stat stat = Stat.valueOf(statName);
            stat.set(stats, scanner);
            System.out.println(stats);
        }
    }

    static class Stats {
        int speed, health, power;
        float accuracy;

        public String toString() {
            StringBuilder sb = new StringBuilder(50);
            for (Stat stat: Stat.values()) {
                sb.append(stat).append(' ').append(stat.get(this)).append(' ');
            }
            return sb.toString();
        }
    }

    enum Stat {
        speed, health, power, accuracy;

        String get(Stats stats) {
            switch(this) {
                case speed: return String.valueOf(stats.speed);
                case health: return String.valueOf(stats.health);
                case power: return String.valueOf(stats.power);
                case accuracy: return String.valueOf(stats.accuracy);
                default: throw new IllegalStateException(String.valueOf(this));
            }
        }

        double set(Stats stats, Scanner scanner) {
            switch (this) {
                case speed: return stats.speed = scanner.nextInt();
                case health: return stats.health = scanner.nextInt();
                case power: return stats.power = scanner.nextInt();
                case accuracy: return stats.accuracy = scanner.nextFloat();
                default: throw new IllegalStateException(String.valueOf(this));
            }
        }
    }
}