在程序中,我请求用户输入,用户将以以下格式提供:
speed 12健康99 power 50精度.9
并将其拆分并将输入分配为多个整数和双精度(速度、健康、功率、精度),以便稍后在数学方程中使用。我该怎么做呢(分隔符等)?我已经研究了Scanner类,但我找不到在这种情况下有帮助的东西。我只想被指引到正确的方向
谢谢
发布于 2015-01-15 12:56:17
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
*/
}发布于 2015-01-15 14:24:42
这段代码扫描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));
}希望这对你有帮助。
发布于 2015-01-15 15:17:14
为了好玩,这里有一个设计大纲,它将统计信息封装在一个Stats类中,并使用枚举来限制输入统计信息的名称。在本例中,我们使用Scanner从标准输入中读取统计数据。
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));
}
}
}
}https://stackoverflow.com/questions/27956828
复制相似问题