【问题标题】:how to use useDelimiter() once?如何使用 useDelimiter() 一次?
【发布时间】:2019-03-30 19:59:24
【问题描述】:

我有这个代码示例

 String input = "1 fish 2 fish red fish blue fish";  
 Scanner s = new Scanner(input).useDelimiter("fish");

输出:

1 
2
red
blue

预期输出:

1 
2
fish
red
fish
blue
fish

使用相同的useDelimiter而不中断

【问题讨论】:

  • 您的代码没有输出任何内容,但显然您只需在读取所需的数据量后更改分隔符即可。

标签: java


【解决方案1】:

如果分隔符是“鱼”,您将进行双重阅读

String input = "1 fish 2 fish red fish blue fish"; 
String delim = "fish ";
Scanner s = new Scanner(input).useDelimiter(delim);

while (s.hasNext ()) {
    System.out.println(s.next());
    if (delim.equals("fish ") && s.hasNext())
        System.out.println(s.next());
    delim = " ";
    s.useDelimiter(delim);
}

输出

1 
2 
fish
red
fish
blue
fish

回答您的评论。 在这种情况下,我认为你最好使用String::split 如果结果数组中的字符串以fish 开头,则将其丢弃/忽略它。

String input = "1 2 3 fish1 1 2 3 fish2 1 2 3 fish3 1 2 3 fish1 1 2 3 fish2 1 2 3";
String [] arr = inpit.split (" ");

for (String el : arr) {
    if (el.startsWith("fish")) continue;
    System.out.println (el);
} 

【讨论】:

  • 如果初始字符串是这样的呢?字符串输入=“1 2 3 fish1 1 2 3 fish2 1 2 3 fish3 1 2 3 fish1 1 2 3 fish2 1 2 3……”;我想将数据存储在所有鱼字符串之间,例如我想将 1 2 3 存储为鱼 1 和鱼 2 之间的字符串。我可以使用 useDelimiter() 来实现这一点。当我第二次尝试对 fish1 使用 usedelimiter 时,未读取数据。这是我主要关心的问题
  • 在这种情况下,我认为您最好使用String::split 如果结果数组中的字符串以fish 开头,则将其丢弃/忽略它。查看我编辑的答案
【解决方案2】:

您可以在前 2 次使用后通过 s.useDelimiter(" ") 重置分隔符。

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input).useDelimiter("\\bfish\\b");

System.out.println(s.next()); // first use
System.out.println(s.next()); // second use
s.useDelimiter(" ");          // setting delimiter to <space>
// print the rest 

【讨论】:

  • 抱歉没有注意到//First Use
  • 我发现第二个元素是" 2"所以我用"fish "作为分隔符
【解决方案3】:

你可以先消除第一次出现,然后如果你想要那个结果replaceFirst(String regex, String replacement),然后用空格分割,然后再进行分割。

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input.replaceFirst(" fish", "")).useDelimiter(" ");

我从另一个关于 SO 的问题中找到了 replaceFirst

【讨论】:

  • 问题是useDelimiter()怎么用一次?
  • 而且OP可能不知道他可以使用replaceFirst,那么如果它可以更简单更好,为什么你会给出更糟糕的答案呢?
  • 也许 OP 需要按照他的描述使用它,如果您不确定为什么不给他留言询问更多信息。 IMO 我只会拆分字符串,如果 arr[1]"fish",则将其丢弃,但这不是 OP 所要求的。
  • 我没有 50 个代表,所以我不能给他评论。否则我会这样做,这是我的错,因为我没有在答案中提到它。
  • 你可以对冲你的赌注,把这两个想法都放进你的答案中
【解决方案4】:
String input = "1 fish 2 fish red fish blue fish";
Scanner scanner = new Scanner(input).useDelimiter("fish");
System.out.print(scanner.next() + scanner.next());
scanner.useDelimiter(" ");
while (scanner.hasNext()){
        System.out.print(scanner.next() + " ");
}

【讨论】:

  • 问题是如何使用useDelimiter()一次?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多