具有混合类型输入的Java扫描程序类和主类
嗨,我是一个Java初学者,一直在做作业。 我的问题是: 我正在创建一个scanner类和一个具有混合输入类型的main类。 代码是具有混合类型输入的Java扫描程序类和主类,java,java.util.scanner,Java,Java.util.scanner,嗨,我是一个Java初学者,一直在做作业。 我的问题是: 我正在创建一个scanner类和一个具有混合输入类型的main类。 代码是 import java.util.Scanner; import java.util.ArrayList; public class Games { private static Scanner input; public Games() { input = new Scanner(System.in); } public void text
import java.util.Scanner;
import java.util.ArrayList;
public class Games {
private static Scanner input;
public Games() {
input = new Scanner(System.in);
}
public void textParser() {
ArrayList<String> word = new ArrayList<>();
while(input.hasNextLine()) {
word.add(input.next());
}
System.out.println("number of words " + word.size());
System.out.println(word);
ArrayList<Integer> num = new ArrayList<>();
while(input.hasNextInt()) {
num.add(input.nextInt());
}
System.out.println("number of numbers " +num.size());
System.out.println(num);
ArrayList<Double> number = new ArrayList<>();
while(input.hasNextDouble()) {
number.add(input.nextDouble());
}
System.out.println("number of doubles " +number.size());
System.out.println(number);
}
}
如何得出如下要求的结果:
字数11
[杰克,开始,比赛,表格,下午,到下午,他,得到,得分]
数字2的数目
[9,11]
双打号码1
[73.2]
请尝试以下代码
class Games
{
public static Scanner input;
public Games()
{
// input = new Scanner(System.in);
}
public void textParser()
{
ArrayList<String> word = new ArrayList<>();
while (input.hasNextLine())
{
word.add(input.next());
}
System.out.println("number of words " + word.size());
System.out.println(word);
// Scanner s = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");
input = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");
ArrayList<Integer> num = new ArrayList<>();
while (input.hasNextLine())
{
input.next();
while (input.hasNextInt())
{
num.add(input.nextInt());
}
}
System.out.println("number of numbers " + num.size());
System.out.println(num);
// s.close();
ArrayList<Double> number = new ArrayList<>();
input = new Scanner("Jack started the game form 9 pm to 11 pm, he got score 73.2");
while (input.hasNextLine())
{
input.next();
while (input.hasNextDouble())
{
number.add(input.nextDouble());
}
}
input.close();
System.out.println("number of doubles " + number.size());
System.out.println(number);
}
}
您不需要Scanner类,因为您已经有了一个输入字符串。只需使用空格分隔符将其拆分为多个部分,然后进行检查
public class Driver {
public static void main(String[] args){
String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
new Games().textParser(str);
}
}
public class Games {
public /* static */ void textParser(String str) {
String[] parts = str.split("\\s+");
List<String> words = getWords(parts);
System.out.println("number of words " + words.size());
System.out.println(words);
List<Integer> num = getIntegerNumbers(parts);
System.out.println("number of numbers " + num.size());
System.out.println(num);
List<Double> number = getDoubleNumbers(parts);
System.out.println("number of doubles " + number.size());
System.out.println(number);
}
private static List<String> getWords(String... parts) {
return Arrays.stream(parts)
.filter(str -> {
try {
Double.parseDouble(str);
return false;
} catch(Exception e) {
return true;
}
})
.collect(Collectors.toList());
}
private static List<Integer> getIntegerNumbers(String... parts) {
return Arrays.stream(parts)
.map(str -> {
try {
return Integer.parseInt(str);
} catch(Exception e) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
private static List<Double> getDoubleNumbers(String... parts) {
return Arrays.stream(parts)
.map(str -> {
try {
return Double.parseDouble(str);
} catch(Exception e) {
return null;
}
})
.filter(Objects::nonNull)
.filter(val -> Double.compare(val, val.intValue()) != 0)
.collect(Collectors.toList());
}
}
如何从scanner class->you not调用public void textParser方法。实际上,在main中调用类游戏的textParser方法的方法是:创建一个游戏实例Games=newgames;然后使用该实例调用该方法:game.textParser;。我试过你说的主课,但看不到答案result@oleg.cherednik我的不好,评论被删除。谢谢你的回复,但这会导致field Games.input不可见的错误。Games.input=句子;-这不是OOP,封装在哪里?问题中不需要封装。Dear@oleg.cherednik@oleg.cherednik根据问题,您应该使用Scanner class.Yes。你说得对,但我还没想好。
public class Driver
{
public static void main(String[] args)
{
String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
Scanner sentence = new Scanner(str);
Games game = new Games();
Games.input = sentence;
game.textParser();
}
}
public class Driver {
public static void main(String[] args){
String str = "Jack started the game form 9 pm to 11 pm, he got score 73.2";
new Games().textParser(str);
}
}
public class Games {
public /* static */ void textParser(String str) {
String[] parts = str.split("\\s+");
List<String> words = getWords(parts);
System.out.println("number of words " + words.size());
System.out.println(words);
List<Integer> num = getIntegerNumbers(parts);
System.out.println("number of numbers " + num.size());
System.out.println(num);
List<Double> number = getDoubleNumbers(parts);
System.out.println("number of doubles " + number.size());
System.out.println(number);
}
private static List<String> getWords(String... parts) {
return Arrays.stream(parts)
.filter(str -> {
try {
Double.parseDouble(str);
return false;
} catch(Exception e) {
return true;
}
})
.collect(Collectors.toList());
}
private static List<Integer> getIntegerNumbers(String... parts) {
return Arrays.stream(parts)
.map(str -> {
try {
return Integer.parseInt(str);
} catch(Exception e) {
return null;
}
})
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
private static List<Double> getDoubleNumbers(String... parts) {
return Arrays.stream(parts)
.map(str -> {
try {
return Double.parseDouble(str);
} catch(Exception e) {
return null;
}
})
.filter(Objects::nonNull)
.filter(val -> Double.compare(val, val.intValue()) != 0)
.collect(Collectors.toList());
}
}
number of words 11
[Jack, started, the, game, form, pm, to, pm,, he, got, score]
number of numbers 2
[9, 11]
number of doubles 1
[73.2]