使用Scanner类中的useDelimiter时遇到一些问题.
Scanner sc = new Scanner(System.in).useDelimiter("-");
while(sc.hasNext())
{
System.out.println(sc.next());
}
Run Code Online (Sandbox Code Playgroud)
如果我有这个输入
ABC
输出将是
AB
等到我输入另一个" - "表示打印出最后一个字符
但是,如果我没有用户输入数据,而是将字符串插入扫描程序,则代码将起作用.它是什么原因,我该如何解决?我不想使用StringTokenzier
我正在读取一个文本文件并将该文本文件中的一组唯一单词存储到一个ArrayList中(如果有更好的结构,请建议这样做).我正在使用扫描仪扫描文本文件并将分隔符指定为""(空格),如下所示;
ArrayList <String> allWords = new ArrayList <String> ();
ArrayList <String> Vocabulary = new ArrayList <String> ();
int count = 0;
Scanner fileScanner = null;
try {
fileScanner = new Scanner (new File (textFile));
} catch (FileNotFoundException e) {
System.out.println (e.getMessage());
System.exit(1);
}
fileScanner.useDelimiter(" ");
while (fileScanner.hasNext()) {
allWords.add(fileScanner.next().toLowerCase());
count++;
String distinctWord = (fileScanner.next().toLowerCase());
System.out.println (distinctWord.toString());
if (!allWords.contains(distinctWord)) {
Vocabulary.add(distinctWord);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,在打印词汇表的内容之后,在每个单词之后都会跳过一个单词.因此,例如,如果我有以下文本文件;
"敏捷的棕色狐狸跳过了懒狗"
印刷的内容是"快速狐狸懒",然后它给我一个错误;
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at *java filename*.getWords(NaiveBayesTxtClass.java:82)
at …Run Code Online (Sandbox Code Playgroud) 我已经打包我的jar文件内的exe文件,我试图将其复制到一个临时位置,这样我可以使用运行它Desktop.browse(),要做到这一点,我设置了输入流构造扫描仪使用class.getResourceAsStream,然后用printwriter写的,所有的到一个文件.发生的问题表明exe无效.我认为这是由于一些二进制数据丢失.如果有人可以提供帮助,请发表评论.
Scanner sc = new Scanner(ClassBuilder.class.getResourceAsStream("jd-gui.exe"));
File copy = new File("C://users//Owner//Desktop//java//jd-gui.exe");
copy.createNewFile();
PrintWriter writer = new PrintWriter(copy);
while(sc.hasNextLine())
writer.println(sc.nextLine());
writer.flush();
writer.close();
sc.close();
Desktop.getDesktop().browse(copy.toURI());
Run Code Online (Sandbox Code Playgroud) 我正在做一个简单的抛硬币游戏,我写了几种方法来调用并使我的主要课程简短.游戏播放一次后,要求用户输入的第一个If/Else语句跳转到Else语句而不提示输入.
package cointoss;
import java.util.Random;
import java.util.Scanner;
public class Game {
int money;
int result;
int bet;
Random rn = new Random();
Scanner in = new Scanner(System.in);
String playerPick;
String aResult;
public void setMoney(int a)
{
money = a;
}
public int getMoney()
{
return money;
}
public void getBet()
{
System.out.println("How much would you like to bet?");
bet = in.nextInt();
do{
if(bet > money)
{
System.out.println("You cannot bet more than you have!");
System.out.println("You have bet " + (bet - …Run Code Online (Sandbox Code Playgroud) 当初始选择无效时,为什么这会导致我陷入无限循环?
while (true) {
System.out.print("Choice:\t");
try {
int choice = scanner.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("Invalid Input!");
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Choice: df
Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input!
Choice: Invalid Input! …Run Code Online (Sandbox Code Playgroud) java exception infinite-loop java.util.scanner inputmismatchexception
我显然正面临无限循环while(input.hasNext()),如下面的代码所示
File file = new File("data.txt");
Scanner input = new Scanner(file);
int sum = 0;
while (input.hasNext()) {
if (input.hasNextInt()) {
sum += input.nextInt();
}
}
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)
一些相关的问题解释了为什么如果输入流是System.in,它总是返回true ,但是我正在扫描File.
请让我知道我哪里出错了.
我正在尝试计算唯一整数值的总和(空格分隔的位置).
编辑:
经验教训,
input.hasNext()不会将指针移动到下一行,因此扫描仪不会超过任何输入.正如在这个问题的答案以及这里所解释的那样.
我有这个代码:
Scanner fileReader = new Scanner(myFile);
// some code
fileReader = new Scanner(myFile);
// some more code
fileReader.close();
Run Code Online (Sandbox Code Playgroud)
它做我想要的(从文件顶部再次启动阅读器)但是我通过实例化两次只打开扫描器并且只关闭一次?在我重新修复之前我应该关闭吗?我有什么作品,但我想知道这是否是好的做法.
我有一个表格的txt文件:
Key:value
Key:value
Key:value
...
Run Code Online (Sandbox Code Playgroud)
我想将所有键及其值放在我创建的hashMap中.如何获取FileReader(file)或Scanner(file)知道何时在冒号(:)分割键和值?:-)
我试过了:
Scanner scanner = new scanner(file).useDelimiter(":");
HashMap<String, String> map = new Hashmap<>();
while(scanner.hasNext()){
map.put(scanner.next(), scanner.next());
}
Run Code Online (Sandbox Code Playgroud) 任何人都可以告诉我,当我打y/n时 - 为什么我的比赛没有停止,它只会再次开始.我isDone()在跑步之前调用我的方法,但它只是一遍又一遍地运行.
public class Model {
int numberToGuess = 29;
int counter;
boolean isDone;
Scanner sc = new Scanner(System.in);
public Model() {
isDone = false;
run();
}
public void run() {
welcomeMessage();
while (true) {
guessNumber();
}
}
public void welcomeMessage() {
System.out.println("Welcome to " + '\n' + "***** GUESS THE NUMBER *****");
}
public void guessNumber() {
System.out.println("Please enter number and hit 'Enter'" + '\n');
if (sc.hasNextInt()) {
int input = sc.nextInt();
counter++;
if (input < …Run Code Online (Sandbox Code Playgroud) 我试图让扫描仪在每个@符号上分割一个字符串,但转义时除外(或在一行的开头)
我的RegEx:
(?:[^\\])@
(?: // Start of non-capturing group (0)
[ // Match any characters in square brackets [
^\\ // Match any non-\ character.
] // ]
) // End of non-capturing group (0)
@ // Match literal '@'
Run Code Online (Sandbox Code Playgroud)
从我的理解来看,这应该符合我的意图。
但是,在扫描仪中使用此模式时,它只是忽略了以下事实:不应将非捕获组计入定界符,只是为了与之匹配,定界符(要删除/分割的部分)应仅为'@ '。因此,对于以下示例字符串:“ Hello @ World”,结果必须为[“ Hello”,“ World”]。
除了运行下面的代码示例:
private static void test() {
try (Scanner sc = new Scanner("test@here")) {
sc.useDelimiter("(?:[^\\\\])@"); // Every unescaped @ sign.
while (sc.hasNext()) {
String token = sc.next();
System.out.println(token);
}
}
}
Run Code Online (Sandbox Code Playgroud)
产量:
tes …Run Code Online (Sandbox Code Playgroud)