【问题标题】:Splitting a scanner string拆分扫描仪字符串
【发布时间】:2015-05-20 05:32:05
【问题描述】:
import java.io.IOException;
import java.util.Scanner;


public class web_practice {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);
        String input = scanner.next();

        int l = input.indexOf(' ');
        String cmd = input.substring(0, l);
        String end = input.substring(l);

        if (cmd.equals("define"));
        java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://dictionary.reference.com/browse/" + end));
    }
}

我试图编写一个代码来查找单词的定义,方法是将其连接到 dictionary.com 并检查他们是否将单词“define”作为第一个单词?

拆分不起作用。

【问题讨论】:

  • 你在哪里使用 split ?
  • 什么是“拆分不起作用”?输入是什么?
  • 你能把input字符串值放上去吗?
  • 顺便说一句,if (condition); 减少到一个 noop,这要归功于分号(假设没有副作用)。这是将大括号始终与ifs 一起使用被认为是最佳做法的原因之一。

标签: java split java.util.scanner


【解决方案1】:
public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);
        String input = scanner.next();

        int words[] = input.split(' ');

        if (words[0].equalsIgnoreCase("define")) {
            java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://dictionary.reference.com/browse/" + words[0]));
        }
    }

【讨论】:

    【解决方案2】:
    import java.io.*;
    public class Sol {
        public static void main(String[] args) throws IOException 
        { 
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
            String[] input = new String[2];     
            input = in.readLine().split(" "); 
            int a; 
            int b; 
            a = Integer.parseInt(input[0]); 
            b = Integer.parseInt(input[1]); 
    
            System.out.println("You input: " + a + " and " + b); 
        } 
    }
    

    【讨论】:

      【解决方案3】:

      这段代码对你有用

          String[] strArr = input.split(" ") ; 
      
          if(strArr[0].equals("define"){
          }
      

      【讨论】:

      • 我将如何获取字符串的其余部分以添加到 url 的末尾。我试着做 strArr[1],但它说它超出了范围。
      • 上面的代码肯定会让你得到第一个单词,其余的按你的方式做。
      【解决方案4】:

      您的问题是您使用的是Scanner,默认行为是将InputStream 拆分为空格。因此,当您调用next() 时,您的input 字符串仅包含命令,而不是整行。请改用Scanner.nextLine() 方法。

      还要注意String end = input.substring(l); 将在结尾字符串中添加一个空格。您可能想使用String end = input.substring(l+1);。这是固定的main 方法:

      public static void main(String[] args) throws IOException {
          Scanner scanner = new Scanner(System.in);
          String input = scanner.nextLine();
      
          int l = input.indexOf(' ');
          if(l >= 0) {
              String cmd = input.substring(0, l);
              String end = input.substring(l+1);
      
              if (cmd.equals("define"));
                  java.awt.Desktop.getDesktop().browse(
                      java.net.URI.create("http://dictionary.reference.com/browse/" + end));
          }
      }
      

      【讨论】:

        【解决方案5】:

        来自Class Scanner

        扫描器使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。

        所以你不会使用scanner.next(); 方法得到' '。相反,您可以直接使用scanner.next();,例如:

        Scanner scanner = new Scanner(System.in);
        String input = scanner.next();
        
        if ("define".equals(input )){
             String end = scanner.next();// Next token
             java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://dictionary.reference.com/browse/" + end));
        }
        

        查看结果:output

        【讨论】:

          【解决方案6】:
              Scanner scanner = new Scanner(System.in);
              String input = scanner.next();;
              String[] inputs = input.split(" ");
              if (inputs[0].equalsIgnoreCase("define")){  java.awt.Desktop.getDesktop().browse(java.net.URI.create("http://dictionary.reference.com/browse/" ));}
          

          【讨论】:

          • 可以使用String split()方法。它会返回一个字符串数组。现在你可以通过索引来获取你的字符串了。
          • 为了防止空指针错误,您应该使用"define".equalsIgnoreCase(inputs[0])——这是一种很好的做法。
          【解决方案7】:

          我在您的代码中看到的问题是使用scanner.next(); next() 方法将读取下一个没有空格的令牌,用于控制台输入define blabla input 变量的值将是define 即没有空格所以在你的情况下,没有空格字符,所以input.indexOf(' '); 将返回-1substring() 提供例外,快速修复会将scanner.next(); 行更改为scanner.nextLine();,这将读取整行而不是令牌。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-23
            相关资源
            最近更新 更多