我有来自以下形式的用户的输入:
1234 abc def gfh
..
8789327 kjwd jwdn
stop
现在如果我使用Scanner并依次使用
Scanner sc=new Scanner(System.in);
String t=sc.nextLine();
while(!t.equals("stop"))
{
int i=sc.nextInt();
int str=sc.nextLine();
t=sc.nextLine();
}
我有什么方法可以得到 I = 1234 str =“abc def gfh” ... 依此类推...当用户进入停止时停止
我想分别接受数值和字符串...而不使用正则表达式。 此外,我想停止输入关键字“停止”。
答案 0 :(得分:1)
您永远不会更改t
的值,因此除非您的文件的第一行是stop
,否则while条件将始终为true。
答案 1 :(得分:1)
首先,你对所接受的输入一无所知,只是忽略它以接受下一个输入。
其次,scanner.nextLine()
返回下一行读取的字符串。要单独获取令牌,您需要拆分string
读取以获取它们。
第三,你应该检查你的时间,是否有下一个输入使用scanner#hasNextLine
,如果它等于true
,那么只有你应该在你的while循环中读取你的输入。
如果您想单独阅读每个令牌,最好使用Scanner#next
方法,该方法返回下一个令牌读取。
此外,您想阅读integers
和strings
,因此您还需要测试是否有整数。您需要使用Scanner#hasNextInt
方法。
好的,因为你想在每一行分别阅读integer
和string
。
以下是您可以尝试的内容: -
while (scanner.hasNextLine()) { // Check whether you have nextLine to read
String str = scanner.nextLine(); // Read the nextLine
if (str.equals("stop")) { // If line is "stop" break
break;
}
String[] tokens = str.split(" ", 1); // Split your string with limit 1
// This will give you 2 length array
int firstValue = Integer.parseInt(tokens[0]); // Get 1st integer value
String secondString = tokens[1]; // Get next string after integer value
}
答案 2 :(得分:1)
您的代码:
Scanner sc=new Scanner(System.in);
String t=sc.nextLine();
while(!t.equals("stop"))
{
int i=sc.nextInt();
int str=sc.nextLine();
t=sc.nextLine();
}
首先int str=sc.nextLine();
错误,因为nextLine()
返回字符串。据我说,你能做的是:
Scanner sc=new Scanner(System.in);
String t=sc.nextLine();
int i;
String str="";
while(!t.equals("stop"))
{
int index=t.indexOf(" ");
if(index==-1)
System.out.println("error");
else{
i=Integer.parseInt(t.substring(0,index));
str=t.substring(index+1);
}
t=sc.nextLine();
}
我希望它有所帮助。