嘿大家,这个问题对我来说似乎很傻,但我不能为我的生活找到答案.我想要做的就是扫描一个用星号(*)分隔的字符串.但是,当我尝试foo.useDelimiter("*");时,Java将星号解释为通配符,并使用每个字符作为分隔符...这显然不是我想要的.我尝试使用反斜杠作为转义字符,但这给了我编译器错误"非法转义字符".
这可能很简单,但我又一次不知道在哪里找到答案!
非常感谢!
莱纳斯
import java.util.Scanner;
class newClass {
public static void main(String args[]) {
Scanner s = new Scanner(System.in);
while (s.hasNext()) {
System.out.println(s.next());
}
s.close();
}
}
Run Code Online (Sandbox Code Playgroud)
该程序不会返回提示(我已通过终端运行它).这是为什么?我该如何纠正?
我需要从用户那里获得一系列整数.系统不会提示用户输入数字.输入将具有以下形式:
6
34 12 7 4 22 15
3
3 6 2
第一行表示第二行中的整数数.我首先尝试将第二行作为String读取,然后使用StringTokenizer将其分解为代码中的整数.正常情况发生在我的程序中很多,这很耗时,我需要直接阅读它们.我记得在C++中它过去相当简单.以下代码段用于执行此操作.
for(i=0;i<6;i++)
cin>>a[i];
Run Code Online (Sandbox Code Playgroud)
为此,我使用了java.util.Scanner,我的代码如下所示:
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
Scanner src = new Scanner(System.in);
for(x=0;x<2;x++){
arraySize = Integer.parseInt(br.readLine());
for(i=0;i<arraySize;i++)
array[i] = src.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我收到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: "34 12 7 4 22 15"
Run Code Online (Sandbox Code Playgroud)
我愿意接受建议,而不是仅仅依靠Scanner.如果有任何其他方法来实现这一点,我就是游戏.
我正在编写代码来阅读简单的单词语句,如"一二三",并将每个单词放入一个数组String []标记,我想使用Scanner输入语句,但它只读取第一个单词.当我使用main方法输入语句时效果很好.我能知道我的错误是什么吗?
这是2个代码:
//使用main方法:
public class MyLangyage {
public static void main(String[] args) {
String statement = "one two three";
screen(statement);
}
public static void screen(String statement) {
String token[]= statement.split(" ");
for (int i = 0; i < token.length; i++) {
System.out.println(token[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
控制台的结果将是:
一二三
//使用扫描仪:
import java.util.Scanner;
public class MyLangyage {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String statement = scanner.next();
screen(statement);
}
public static void screen(String statement) {
String token[]= …Run Code Online (Sandbox Code Playgroud) 为什么以下代码返回false?
Scanner sc = new Scanner("-v ");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
Run Code Online (Sandbox Code Playgroud)
奇怪的是它-[a-zA-Z]//s+会回归真实.
我也无法理解为什么这会返回true:
Scanner sc = new Scanner(" -v");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
Run Code Online (Sandbox Code Playgroud) 我试图从用户连续读取输入,直到用户键入退出.我只是输入'quit'来测试它,但是console.hasNext()似乎没有返回false.事实上,似乎该程序在第7行(hasNext()行)被阻止.有任何想法吗?
boolean bool = true;
while (bool) {
System.out.println("Type 'quit':");
Scanner console = new Scanner(System.in);
if (console.next().equals("quit")) {
System.out.println("You typed quit");
System.out.println("check: " + console.hasNext()); // This line doesnt print
bool = false;
}
}
Run Code Online (Sandbox Code Playgroud) 如果我执行以下代码:
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
Scanner s = null;
StringBuilder builder = new StringBuilder(64);
String line = "1.1 2.2 3.3";
float fsum = 0.0f;
s = new Scanner(line).useDelimiter(" ");
while (s.hasNextFloat()){
float f = s.nextFloat();
fsum += f;
builder.append(f).append(" ");
}
System.out.println("Floats found: " + builder);
System.out.println("Sum: " + fsum);
s.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我的输出是:
Floats found:
Sum: 0.0
Run Code Online (Sandbox Code Playgroud)
但是,如果我用点替换逗号"1,1 2,2 3,3",那么它确实识别浮点数:
Floats found: 1.1 2.2 3.3
Sum: 6.6000004
Run Code Online (Sandbox Code Playgroud)
我想这是因为我的SO是西班牙语,我们使用逗号而不是带小数的点.我想过使用Locale,但是没有Locale.SPANISH.
此外,当我运行它时,它的行为正好相反: …
所以我Scanner scan早先实例化了很多,但它在我的第二个scan.nextLine()之后跳过了scan.nextInt().我不明白为什么会跳过它?
System.out.println("Something: ");
String name = scan.nextLine();
System.out.println("Something?: ");
int number = scan.nextInt();
System.out.println("Something?: ");
String insurer = scan.nextLine();
System.out.println("Something?: ");
String another = scan.nextLine();
Run Code Online (Sandbox Code Playgroud) 这有什么好处/垮台吗?
通常,从流中读取时会抛出异常:
try {
inputStream.read();
}catch(IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但是当使用a时Scanner,你不会被迫处理异常.相反,如果抛出一个,你会使用Scanner#ioException().
我知道Scanner不是一个流,而不是一个解析数据的tokenizer,如果需要,但为什么它处理它的异常不像其他涉及IO的行为?我什么时候应该以这种方式处理异常?
Scanner in=new Scanner(System.in);
while(true){
int X = in.nextInt();
System.out.println(X);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码只能按我输入的顺序读取数字.例如:1 2 3 4这些数字将被读作1 2 3 4
我希望它们以相反的顺序读取.我找不到任何方法.