打破扫描器hasNext()循环

时间:2017-02-22 03:10:11

标签: java loops

我使用扫描仪处理用户输入句子,如果单词"嘿"它似乎添加到扫描仪。所以基本上是一个字数。如何在不使用

之类的情况下突破无限时间(scan.hasNext())循环
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {
    Neo4jConfigTest.class,
    FdTemplate.class,
    FdServerIo.class,
    MapBasedStorageProxy.class})
@ActiveProfiles({"dev", "fd-auth-test", "fd-client"})
public class TestEntityLinks  {

@Autowired
private ContentModelService contentModelService;

@Autowired
private BatchService batchService;

@Test
public void doSomething () { ... }

我无法以这种方式突破循环,因为我已经获得了无法改变的输入。

if(scan.next().equals("exit")

    break;

3 个答案:

答案 0 :(得分:0)

使用hasNext()的while循环不会中断,直到您使用文件结尾条件,如下所示

while(scan.hasNext()){
  if(scan.next().equals("hey")){
     c++;
  }
  else if(scan.next().equals("exit")){
  break;
}

当你从stdin读取时,它要么想要一个EOF字符(Linux / Unix / Mac上的Ctrl + D或Windows上的Ctrl + Z),要么是一个突破循环的条件。

答案 1 :(得分:0)

您可以设置while(true)表示无限循环,并在匹配退出

后将其分解
    Scanner scan = new Scanner(System.in);
    int c = 0;
    while(true){
        if (scan.next().equals("exit"))
        {
            break;
        }
        else 
        {    
            c++;
        }
    }
    System.out.println(c);

对于行/字数,您可以使用

String text=null;
    while(true)
    {
    Scanner inputText = new Scanner(System.in);
    int lineCount=0;
    text= inputText.nextLine();
    if(text!=null)
    {
        lineCount++;
    }
    StringBuilder sb = new StringBuilder();
    sb.append(text);   

    int wordcount=sb.length();

    System.out.println("Text : "+text);
    System.out.println("Number of Words:"+wordcount);
    System.out.println("Number of Lines: "+lineCount);
    System.out.println("Text afer removing  white spaces :"+text.replaceAll(" ", "").length());
    }

答案 2 :(得分:0)

如果您只需要将一行文本复制并粘贴到程序中作为字符串文字......

String msg = "hey you";
Scanner tokenizer = new Scanner(msg);
int count = 0;
while (tokenizer.hasNext()) {
    if (tokenizer.next().equals("hey")) {
        ++c;
    }
}

您可以使用Scanner来标记字符串。你的循环应该结束。