0

如果我有一个包含以下内容的文件:

11:17 GET this is my content #2013
11:18 GET this is my content #2014
11:19 GET this is my content #2015

如何使用Scanner并忽略 `String line =scanner.nextLine(); 的某些部分?

我想要的结果是:

this is my content
this is my content
this is my content

所以我想从一开始就将所有东西都绊倒,直到 GET,然后把所有东西都带到 # 字符。

这怎么可能轻易做到?

4

5 回答 5

1

您可以使用String.indexOf(String str)String.indexOf(char ch)方法。例如:

String line = scanner.nextLine();
int start = line.indexOf("GET");
int end = line.indexOf('#');
String result = line.substring(start + 4, end);
于 2013-10-01T09:28:30.803 回答
0

一种方法可能是

String strippedStart = scanner.nextLine().split(" ", 3)[2];
String result = strippedStart.substring(0, strippedStart.lastIndexOf("#")).trim();

这假设开头总是两个空格分隔的标记(11:22 GET 或 11:33 POST,idk)。

于 2013-10-01T09:28:38.287 回答
0

你可以做这样的事情: -

String line ="11:17 GET this is my content #2013";
int startIndex = line.indexOf("GET ");
int endIndex = line.indexOf("#");
line = line.substring(startIndex+4, endIndex-1);
System.out.println(line);
于 2013-10-01T09:30:14.597 回答
0

在我看来,解决您的问题的最佳方法是使用Java regex。使用正则表达式,您可以定义要检索的文本组和文本类型。我很久没有使用 Java 了,所以我会尽力帮助你。我会尽力为您指明正确的方向。

首先,编译一个模式:

Pattern pattern = Pattern.compile("^\d{1,2}:\d{1,2} GET (.*?) #\d+$", Pattern.MULTILINE);

正则表达式的第一部分表示您期望一个或两个数字后跟一个冒号,然后再跟一个或两个数字。之后是 GET(如果您期望这些单词,您可以使用 GET|POST 或 \w+? 如果您期望任何单词)。然后你用括号定义你想要的组。最后,您将散列和任意数量的数字与至少一位数字放在一起。您可能会考虑放置标志 DOTALL 和 CASE_INSENSITIVE,尽管我认为您不会需要它们。

然后你继续使用匹配器:

Matcher matcher = pattern.matcher(textToParse);
while (matcher.find())
{
    //extract groups here
    String group = matcher.group(1);
}

while循环中,您可以使用matcher.group(1)括号来查找您选择的组中的文本(您要提取的文本)。matcher.group(0)给出整个发现,这不是你目前正在寻找的(我猜)。

抱歉,代码中的任何错误,尚未经过测试。希望这能让你走上正确的道路。

于 2013-10-01T09:51:09.527 回答
0

您可以尝试这个相当灵活的解决方案:

Scanner s = new Scanner(new File("data"));
Pattern p = Pattern.compile("^(.+?)\\s+(.+?)\\s+(.*)\\s+(.+?)$");
Matcher m;
while (s.hasNextLine()) {
    m = p.matcher(s.nextLine());
    if (m.find()) {
        System.out.println(m.group(3));
    }
}

这段代码在打印之前忽略了每一行的第一个、第二个和最后一个单词。

优点是它依靠空格而不是特定的字符串文字来执行剥离。

于 2013-10-01T09:53:16.787 回答