我一直在使用下面的成语一段时间了.它似乎是最广泛的,至少在我访问过的网站上.
是否有更好/不同的方式将文件读入Java中的字符串?
private String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
Run Code Online (Sandbox Code Playgroud) 这是一个可以用作重复目标的规范问题/答案.这些要求基于每天发布的最常见问题,可根据需要添加.它们都需要相同的基本代码结构才能进入每个场景,并且它们通常彼此依赖.
扫描仪看起来像一个"简单"的类,这是第一个错误的地方.它并不简单,它具有各种非明显的副作用和异常行为,以非常微妙的方式打破了最小惊讶原则.
所以这对于这个课程来说似乎有些过分,但洋葱错误和问题的剥离都很简单,但由于它们的相互作用和副作用,它们非常复杂.这就是为什么每天在Stack Overflow上有很多关于它的问题.
大多数Scanner问题包括尝试不止一次这些事情.
我希望能够让我的程序在每次上一次输入后自动等待下一个输入.
我想知道如何检测退出命令并在输入该命令时结束我的程序.
我想知道如何以不区分大小写的方式匹配exit命令的多个命令.
我希望能够匹配正则表达式模式以及内置基元.例如,如何匹配看似日期(2014/10/18)的内容?
我想知道如何匹配可能不容易用正则表达式匹配实现的东西 - 例如,URL(http://google.com).
在Java世界中,Scanner是一个特殊情况,它是一个非常挑剔的课程,教师不应该给新学生使用说明.在大多数情况下,教师甚至不知道如何正确使用它.如果在专业的生产规范中使用它几乎没有,所以它对学生的价值是非常值得怀疑的.
使用Scanner意味着这个问题和答案提到的所有其他事情.Scanner关于如何解决这些常见问题并不仅仅是因为它Scanner几乎在所有Scanner出错的问题中始终存在共病问题.它永远不仅仅是关于next()vsnextLine(),这只是该类实现的挑剔的一个症状,在问题询问中的代码发布中总会存在其他问题Scanner.
答案显示了Scanner在StackOverflow上使用和询问的99%的案例的完整,惯用的实现.
特别是在初学者代码中.如果您认为这个答案过于复杂,那么Scanner请先告诉新学生使用的教师,然后再解释其复杂性,怪癖,非明显副作用及其行为的特点.
Scanner关于最小惊讶原则的重要性以及为什么一致的行为和语义在命名方法和方法论证中很重要,这是一个很好的教学时刻.
您可能永远不会真正看到
Scanner在专业/商业业务应用程序中使用,因为它所做的一切都是通过其他方式做得更好.真实世界的软件必须比Scanner允许您编写代码更具弹性和可维护性.真实世界的软件使用标准化的文件格式解析器和文档格式,而不是独立分配中给出的特殊输入格式.
getch()在Java中有没有与C++相同的东西?这是一个按下键盘键时向前移动控件的功能,并且还存储按下的字符.
我想在控制台应用程序中使用该功能.
我写了一段面试的代码。它询问您您的年龄以及性别。由于某种原因,.exe在打印出第二个问题后会终止。这是为什么?我该如何解决?
我检查了语法,但似乎找不到错误。
导入java.io.IOException;
公共类Abfrage {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
char Geschlecht;
System.out.println("Wie ist dein Geschlecht? M oder W?");
Geschlecht = (char) System.in.read();
int Alter;
System.out.println("Wie ist dein Alter?");
Alter = (int) System.in.read();
if (Alter >= 18 && Alter <= 100)
{
System.out.println("Du bist volljaehrig, herzlichen Glueckwunsch!");
}
}
Run Code Online (Sandbox Code Playgroud)
}
它打印出该字符串(“ Wie ist dein Alter?”),然后终止。我不能输入年龄(数字),这是println中提出的问题。
我希望它能使我进入年龄,如果我在18岁到100岁之间,它应该告诉我“恭喜您成年。” (如果还没有结束,还有更多)
编辑:我试图添加一个if else语句。当我运行.exe时:
if (Alter >= 18 && Alter <= 100)
{
System.out.println("Du bist volljaehrig, herzlichen …Run Code Online (Sandbox Code Playgroud) 这似乎是一个常见的问题(多次询问)但我无法找到这种行为的解释.以下代码在一个编译器中工作,但抛出Exception in thread "main" java.util.NoSuchElementException另一个编译器
Scanner s = new Scanner(System.in);
System.out.println("Enter name: ");
String name = s.next();
System.out.println("Name is " + name);
Run Code Online (Sandbox Code Playgroud)
在https://www.compilejava.net/和https://www.codechef.com/ide上测试它会抛出异常.但是,在一些编译器上它工作正常.这种行为是否有任何原因(比如JDK中的更改或其他内容)?
我希望在 java 中的一行中读取多个输入。
前任:
System.out.print("Input name, age, address, city: ");
Run Code Online (Sandbox Code Playgroud)
用户将输入这些用空格分隔的详细信息
控制台中的预期内容:
输入姓名、年龄、地址、城市:Tom, 10, USA, NY
使用 Scanner 类知道如何做到这一点。谢谢。