首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Java)如何将用户输入字符串拆分成多个整数和双精度

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

Stack Overflow用户
提问于 2015-01-15 12:30:59
回答 3查看 2.2K关注 0票数 0

在程序中,我请求用户输入,用户将以以下格式提供:

speed 12健康99 power 50精度.9

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

谢谢

EN

回答 3

Stack Overflow用户

发布于 2015-01-15 12:56:17

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-01-15 14:24:42

这段代码扫描sysin中的一行,并将其转换为键值对的映射:

代码语言:javascript
复制
  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));
  }

希望这对你有帮助。

票数 0
EN

Stack Overflow用户

发布于 2015-01-15 15:17:14

为了好玩,这里有一个设计大纲,它将统计信息封装在一个Stats类中,并使用枚举来限制输入统计信息的名称。在本例中,我们使用Scanner从标准输入中读取统计数据。

代码语言:javascript
复制
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));
            }
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27956828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档