我记得在Python中做了一些相同的事情并发现它很容易,但我似乎无法在Java中找到解决方案。我基本上需要编程来读取文本文件,但只读取每行的第一部分。
文本文件当前看起来像
test1, test1
test2, test2
test3, test3
我有一个验证系统,所以当用户注册时,它会检查用户名是否已经被占用。我只需要能够在没有密码的情况下检查用户名,或者换句话说,读取到逗号的行。我已经有了检查登录用户名和密码的代码,如下所示
String user = userText.getText();
String pString = String.valueOf(passwordText.getPassword());
File file = new File("C:/Users/Will/Desktop/UnPs.txt");
boolean found = false;
Scanner scan = null;
try {
scan = new Scanner(file);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(scan.hasNextLine() && found == false) {
String passCheck = scan.nextLine();
if(passCheck.equals(user + "," + pString)) {
System.out.println("Found");
found = true;
}
else if(!passCheck.equals(user + "," + pString)) {
System.out.println("not found");
}
}
我相信以前有人问过这个问题,但是我似乎找不到任何与这个主题相关的东西。
根据我的理解,你可以这样做
Scanner read = new Scanner (new File("C:/Users/Will/Desktop/UnPs.txt"));
read.useDelimiter(",");
String name, pwd;
while(read.hasNext())
{
name = read.next();
pwd= read.next();
System.out.println(name+ " " + pwd + "n"); //just for debugging
}
read.close();
或者使用拆分方法:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html#split(java.lang.String)
可能太简单了,但不妨试试
...
String nameCheck = scan.nextLine();
if (nameCheck.startsWith(userName + ",")) {
...
以真正获得每行的名称:
...
String line = scan.nextLine();
int comma = line.indexOf(',');
if (comma != -1) {
String name = line.substring(0, comma);
...
} else {
//no comma? error message, or just ignore
}
或使用正则表达式:
...
String line = scan.nextLine();
String name = line.replaceFirst(",.*", "");
...
尽管我认为正则表达式在这里有点过头了…但整洁的