我想了解如何使用扫描仪从输入文件中打印某个字符串。对于要打印的字符串,该行必须以* star开头,并且字符串必须用引号括起来,并且是下一个标记,并且与* star忽略空格当然在同一行。
示例输入文本文件:“test.txt”
这是一个测试
* star“variableX”
更多测试
* star“variableY
更多
测试
*明星下一个“variableZ”
根据此示例输入文本,输出应该只是。
“variableX”
以下是我的代码的一部分:
Scanner scanner = new Scanner (new File ("test.txt"));
while (scanner.hasNextLine()){
if(scanner.hasNext("*star")) {
scanner.next();
if(scanner.hasNext()){
String test = scanner.next();
System.out.println(test);
}
但它缺少一些关键的东西。非常感谢帮助!
答案 0 :(得分:2)
package so3947761;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
private static final Pattern RELEVANT_LINE_PATTERN =
Pattern.compile("^\\*star\\s+\"(.*)\"$");
public static void main(String[] args) throws FileNotFoundException {
Scanner scanner = new Scanner(new File("test.txt"));
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
Matcher m = RELEVANT_LINE_PATTERN.matcher(line);
if (m.matches()) {
String data = m.group(1);
System.out.println(data);
}
}
}
}
一些评论:
\n
),则正则表达式无法完成此操作,因此您必须明确定义要替换的序列。\\s*
(行的开头)和^
(行尾)的右侧添加$
允许在这些地方使用空格。答案 1 :(得分:1)
while (scanner.hasNextLine()){
String line = scanner.nextLine();
if(line.startsWith("*star")){
String[] split= line.split("\\s+"); //Split the string where there is whitespace
//No whitespace after *star
if ((split.length<2)){
System.exit(0);
}
String file= split[1];
String star=split[0];
String file1=file.trim(); //Removes whitespace
if(file1.startsWith("\"")&&(file1.endsWith("\""))){
System.out.println(file1);
}
}
答案 2 :(得分:-1)
这就是诀窍
public static void main(String[] args) throws FileNotFoundException
{
Scanner scanner = new Scanner (new File ("c:\\test.txt"));
while (scanner.hasNextLine()){
if(scanner.hasNext(Pattern.compile("\\*star"))) {
scanner.next();
System.out.println(scanner.nextLine());
return;
}
else
scanner.nextLine();
}
}
修改强> 答案中缺少引用部分,不记得把它放在我得到输出的情况下,即使没有它,但这里是一个更强大的解决方案:
Scanner scanner = new Scanner (new File ("c:\\new.txt"));
while (scanner.hasNextLine()){
if(scanner.hasNext(Pattern.compile("\\*star"))) {
scanner.next();
String s = scanner.nextLine();
Matcher m = Pattern.compile("\".+\"").matcher(s);
if(m.find())
{
System.out.println(m.group());
return;
}
}
else
scanner.nextLine();
}