这是我的基本问题:我正在从文件中读取一些行。文件中每一行的格式为:
John Doe 123
Doe
和123
之间有一个标签。
我正在寻找一个正则表达式,以便我可以“挑选”John Doe
。类似scanner.next(regular expression)
的内容会给我John Doe
。
这可能很简单,但我似乎无法让它发挥作用。此外,我试图弄清楚这一点,而不必依赖于那里的标签。
我看过这里:Regular Expression regex to validate input: Two words with a space between。但这些答案都没有奏效。我不断收到运行时错误。
一些代码:
while(inFile.hasNextLine()){
String s = inFile.nextLine();
Scanner string = new Scanner(s);
System.out.println(s); // check to make sure I got the string
System.out.println(string.next("[A-Za-z]+ [A-Za-z]+")); //This
//doesn't work for me
System.out.println(string.next("\\b[A-Za-z ]+\\b"));//Nor does
//this
}
答案 0 :(得分:2)
你需要使用正则表达式吗?你可以简单地在每一行split
上使用\t
方法,只需抓住第一个或第二个元素(我不确定你选择'关闭'john doe的意思)。
答案 1 :(得分:0)
如果您提供的代码正在为您提供运行时错误,那将会有所帮助。
您可以使用正则表达式:
[A-Za-z]+ [A-Za-z]+
如果你总是知道你的名字会是两个字。
您也可以尝试
\b[A-Za-z ]+\b
匹配任意数量的单词(包含字母),确保它捕获整个单词(这就是'\ b') - >返回“John Doe”而不是“John Doe”(也有尾随空格)。不要忘记需要在Java中转义反斜杠。
答案 2 :(得分:0)
这基本上可以将John Doe与其他人隔离开来......
public String isolateAndTrim( String candidate ) {
// This pattern isolates "John Doe" as a group...
Pattern pattern = Pattern.compile( "(\\w+\\s+\\w+)\\s+\\d*" );
Matcher matcher = pattern.matcher( candidate );
String clean = "";
if ( matcher.matches() ) {
clean = matcher.group( 1 );
// This replace all reduces away extraneous whitespace...
clean = clean.replaceAll( "\\s+", " " );
}
return clean;
}
分组括号将允许您从数字部分“挑选”名称部分。 “John Doe”,“Jane Austin”,无论如何。您应该在RegEx中学习分组内容,因为它对于像这样的问题非常有用。
删除额外空格的技巧来自How to remove duplicate white spaces in string using Java?
答案 3 :(得分:0)
您更喜欢简单性和可读性吗?如果是,请考虑以下解决方案
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class MyLineScanner
{
public static void readLine(String source_file) throws FileNotFoundException
{
File source = new File(source_file);
Scanner line_scanner = new Scanner(source);
while(line_scanner.hasNextLine())
{
String line = line_scanner.nextLine();
// check to make sure line is exists;
System.out.println(line);
// this work for me
Scanner words_scanner = new Scanner(line);
words_scanner.useDelimiter("\t");
while (words_scanner.hasNext())
{
System.out.format("word : %s %n", words_scanner.next());
}
}
}
public static void main(String[] args) throws FileNotFoundException
{
readLine("source.txt");
}
}