import java.util.*; 
import java.io.*; 
import java.math.*; public class Jicheng { 
    public static void main(String[] args) { 
     String input = "1 fish 2 fish red fish blue fish";
        Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
        System.out.println(s.nextInt());
        System.out.println(s.nextInt());
        System.out.println(s.next());
        System.out.println(s.next());
        s.close(); 
    } 
}不清楚"\\s*fish\\s*"中\\s*的意义

解决方案 »

  1.   

    \\s  :A whitespace character: [ \t\n\x0B\f\r]
    * :zero or more times
      

  2.   

    Scanner.useDelimiter 方法接受一个正则表达式,而不是普通 String。字符串的内容是一个正则表达式, \s*,将其作为字符串字面值写在源代码里面时,需要使用双引号包起来,同时 '\' 字符也必须转义成 "\\",所以就成了 "\\s*"。
      

  3.   

    useDelimiter(Pattern pattern)这个方法是Scanner中用于设置分隔符的,默认情况下scanner分割符是空格,你这个程序中就是用正则表达式来设置分隔符,"\\s*fish\\s*"前面的一个\\s*表示空格出现0次或多次接着出现fish接着出现0个或多个空格,只要scanner扫描遇到的数据符合这个正则表达式,前面的就当一个数据就可以用Scanner中的next()返回取得数据。