精华内容
下载资源
问答
  • 一、问题背景 博主最近在LeetCode和牛客网做编程题目。在leetcode平台,做编程题目的时候只需要完成所给的类的方法,使用时,输入为方法输入的形式参数,输出为程序的返回值。而在牛客网上的题目,包括一些竞赛时的...

    一、问题背景

    博主最近在LeetCode和牛客网做编程题目。在leetcode平台,做编程题目的时候只需要完成所给的类的方法,使用时,输入为方法输入的形式参数,输出为程序的返回值。而在牛客网上的题目,包括一些竞赛时的题目,形式为输入的是从控制台键入的几行数据,而输出是直接将结果打印到控制台。因此博主决定好好研究一下Java数据的输入方法,其中最原始的Java数据输入方法便是Scanner类及其方法。

    二、Java的Scanner类

    1.Scanner类的构造函数

    Java的Scanner类有8种构造方法,其中最常用的构造方法便是Scanner(InputStream source),此构造方法是从形式参数中的输入流InputStream source扫描而构造一个新的Scanner对象。

    Scanner(InputStream source)   
    

    我们通常用类似Scanner scanner=new Scanner(System.in);来实例化一个Scanner对象,示例代码如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
    
            //让Scanner对象检测控制台终端是否有键盘输入。若没有键盘输入,那么Scanner对象会一直等待键盘输入,从而造成线程阻塞
            if(scanner.hasNext()){
                //若有键盘输入,则以字符串String形式把键盘输入打印到控制台终端
                System.out.println("刚输入的文本是:"+scanner.next());
            }
        }
    }
    

    上述代码scanner.hasNext()的注释中写到:若没有键盘输入,那么Scanner对象会一直等待键盘输入,从而造成线程阻塞。那什么是线程阻塞呢?

    线程阻塞(thread blocking)是指在等待某个条件发生时(如某资源就绪或获得键盘输入),单个线程的执行被暂停从而导致线程被阻塞。例如,用户进程在发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后用户进程才能进行。Java传统的IO模型属于此种方式。

    执行上述代码,我们在控制的终端输入Hello World,结果控制台终端的输出确是Hello。这是为什么呢?
    在这里插入图片描述

    这是因为Scanner对象默认将空白(空格、Tab空白、回车)作为多个输入项之间的分隔符,因此Hello World便被拆解为HelloWorld两个输入项,而我们只有一条scanner.next()语句,故控制台终端仅输出第一个输入项Hello

    2.Scanner类的hasNext()系列方法

    Java SE 1.6的API文档关于Scanner类的方法定义中,有以下几个常用的hasNext()系列方法:

    Scanner类的hasNext()系列方法方法详情
    public boolean hasNext()检测控制台终端缓存中是否有输入项,若无输入项则会一直等待键盘输入,从而可能造成线程阻塞;在等待键盘输入时若获得输入项,则将输入项存入控制台终端缓存,并返回boolean类型的true。若控制台终端缓存中有输入项,则直接返回boolean类型的true。同时控制台终端缓存中的输入项保持不变,并等待Scanner对象的next()系列方法取出。
    public boolean hasNextDouble()检测控制台终端缓存中是否有输入项,若无输入项则会一直等待键盘输入,从而可能造成线程阻塞;在等待键盘输入时若获得输入项,则将输入项存入控制台终端缓存,再检测输入项是否为double浮点型,是则返回boolean类型的true,否则返回false。若控制台终端缓存中有输入项,依然检测输入项是否为double浮点型,是则返回boolean类型的true,否则返回false。同时控制台终端缓存中的输入项保持不变,并等待Scanner对象的next()系列方法取出。
    public boolean hasNextInt()检测控制台终端缓存中是否有输入项,若无输入项则会一直等待键盘输入,从而可能造成线程阻塞;在等待键盘输入时若获得输入项,则将输入项存入控制台终端缓存,再检测输入项是否为int整型,是则返回boolean类型的true,否则返回false。若控制台终端缓存中有输入项,依然检测输入项是否为int整型,是则返回boolean类型的true,否则返回false。同时控制台终端缓存中的输入项保持不变,并等待Scanner对象的next()系列方法取出。

    2.1 Scanner类的hasNext()系列方法实测代码1号

    Scanner类的hasNext()系列方法实测代码1号如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println(scanner.hasNext());
            System.out.println(scanner.hasNextInt());
            System.out.println(scanner.hasNextInt());
            System.out.println(scanner.hasNextDouble());
            System.out.println(scanner.hasNextDouble());
            System.out.println("刚输入的文本是:"+scanner.next());
            System.out.println("刚输入的文本是:"+scanner.next());
            System.out.println("刚输入的文本是:"+scanner.next());
        }
    }
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:在Scanner类的hasNext()系列方法执行后,控制台终端缓存中的输入项保持不变,并等待Scanner对象的next()系列方法取出。

    这个实测代码的输入、输出的测试结果是想告诉我们:虽然实测代码中有5条hasNext()系列方法,但在控制台终端的缓存中只会存在1份若干输入项ab cd 12 ef 3.4,不会因为有5条hasNext()系列方法而有5份若干输入项ab cd 12 ef 3.4。而且hasNext()系列方法在检测控制台终端缓存中是否有输入项时,也不会将输入项从控制台终端缓存中取出,而这也可由实测代码的输出结果5条的hasNext()系列方法都只检测了第一个字符串类型的输入项ab证明。

    总共5条的scanner.hasNext()scanner.hasNextInt()scanner.hasNextDouble()在检测控制台终端缓存中的输入项时都只检测了第一个字符串类型的输入项ab,所以scanner.hasNext()输出true,其余输出false

    为什么hasNext()系列方法未检测ab后面的cd 12 ef 3.4
    因为ab和后面的cd 12 ef 3.4之间有分隔符——空格符,hasNext()系列方法默认读取控制台终端及其缓存中第一个分隔符前面的输入项。

    2.2 Scanner类的hasNext()系列方法实测代码2号

    Scanner类的hasNext()系列方法实测代码2号如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println(scanner.hasNextInt());
            System.out.println("刚输入的文本是:"+scanner.next());
        }
    }
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:无论Scanner类的hasNext()系列方法在获得输入项后返回值是truefalse,总会将输入项存入控制台终端缓存。

    3.Scanner类的next()系列方法

    Scanner类的next()系列方法方法详情
    public String next()检测控制台终端及其缓存中是否有输入项。若没有输入项,则会一直等待键盘输入,从而可能造成线程阻塞;若有输入项则返回String字符串类型的输入项。同时因为被next()系列方法取出,该输入项将在缓存中消失。
    public double nextDouble()检测控制台终端及其缓存中是否有输入项。若没有输入项,则会一直等待键盘输入直到获得输入项,从而可能造成线程阻塞;若有输入项再检测输入项是否为double浮点型,是则返回double浮点型的输入项,否则在程序运行时抛出异常InputMismatchException。同时因为被next()系列方法取出,该输入项将在缓存中消失。
    public int nextInt()检测控制台终端及其缓存中是否有输入项。若没有输入项,则会一直等待键盘输入直到获得输入项,从而可能造成线程阻塞;若有输入项再检测输入项是否为int整型,是则返回int整型的输入项,否则在程序运行时抛出异常InputMismatchException。同时因为被next()系列方法取出,该输入项将在缓存中消失。
    public String nextLine()检测控制台终端及其缓存中是否有输入项。若没有输入项,则会一直等待键盘输入,从而可能造成线程阻塞;若有输入项则在不以空格符(Space)和制表符(Tab)为分隔符,而仅以回车(Enter)为分隔符的条件下,以一行为单位返回String字符串类型的输入项。同时因为被nextLine()方法取出,该行的输入项将在缓存中消失。

    3.1 Scanner类的next()系列方法实测代码1号

    Scanner类的next()系列方法实测代码1号如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println("刚输入的文本是:"+scanner.nextDouble());
        }
    }
    
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:Scanner类的next()系列方法是可以脱离hasNext()系列方法而单独使用的。 也就是说hasNext()系列方法仅仅是为了:在next()系列方法执行前,检查输入项是否符合next()系列方法对输入项数据类型的要求。虽然next()系列方法是可以单独使用的,但在实际编码过程中我们最好还是在next()系列方法执行前通过hasNext()系列方法检查输入项的数据类型,以此减少程序报错。

    3.2 Scanner类的next()系列方法实测代码2号

    Scanner类的next()系列方法实测代码2号如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println("刚输入的文本是:"+scanner.next());
            System.out.println("刚输入的文本是:"+scanner.nextDouble());
            System.out.println("刚输入的文本是:"+scanner.nextInt());
        }
    }
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:Scanner类的next()系列方法默认读取控制台终端及其缓存中第一个分隔符前面的输入项。同时因为被next()系列方法取出,该输入项将在缓存中消失。

    3.3 Scanner类的nextLine()方法实测代码

    Scanner类的nextLine()方法实测代码如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println("刚输入的文本是:"+scanner.nextLine());
        }
    }
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:若有输入项,Scanner类的nextLine()方法则在不以空格符(Space)和制表符(Tab)为分隔符,而仅以回车(Enter)为分隔符的条件下,以一行为单位返回String字符串类型的输入项。

    4.Scanner类的useDelimiter()方法

    Scanner类的useDelimiter()方法方法详解
    public Scanner useDelimiter(String pattern)形式参数pattern是一个正则表达式,按照pattern来设定Scanner类的hasNext()和next()系列方法的分隔符。

    我们只需记住下述实例代码scanner.useDelimiter("\n");的用法及意义即可。

    4.1 Scanner类的useDelimiter()方法实测代码

    Scanner类的useDelimiter()方法实测代码如下:

    import java.util.Scanner;
    
    public class ScannerTest {
        public static void main(String[] args){
            //System.in代表标准输入,即键盘输入到控制台终端
            //该行代码表示创建一个通过键盘输入到控制台终端的Scanner对象
            Scanner scanner=new Scanner(System.in);
    
            //将回车(Enter)作为Scanner类中的分隔符
            scanner.useDelimiter("\n");
    
            System.out.println("请输入Scanner将读取的文本:");
            System.out.println("刚输入的文本是:"+scanner.next());
            System.out.println("请输入Scanner将读取的double型数据:");
            System.out.println("刚输入的文本是:"+scanner.nextDouble());
            System.out.println("请输入Scanner将读取的double型数据:");
            System.out.println("刚输入的文本是:"+scanner.nextDouble());
    
        }
    }
    
    

    上述实测代码的输入、输出的测试结果如下:
    在这里插入图片描述
    由实测代码的输入、输出的测试结果可知:scanner.useDelimiter("\n");将回车(Enter)作为Scanner类中的分隔符后,若碰到空格符和制表符,会把整行输入项当做String字符串类型存入控制台终端的缓存,从而导致控制台终端在打印3.4 5.6时抛出异常InputMismatchException,这是因为3.4 5.6中有空格符,所以3.4 5.6是String字符串类型的,其不可作为double浮点型打印输出到控制台终端。

    5.Scanner类的系列方法在实际中的用法

    详情可见OJ中提交Java程序的一些套路

    参考文献:
    [1]什么是阻塞和非阻塞,什么是同步和异步
    [2]浅谈Java 线程阻塞及导致原理
    [3]Java基础之线程阻塞、线程通信之消息队列
    [4]什么是线程阻塞?为什么会出现线程阻塞?
    [5]简书——Java Scanner类
    [6] Java 流(Stream)、文件(File)和IO——Java Scanner 类
    [7]CSDN——java中Scanner
    [8]Java Scanner类的常用方法及用法(很详细)
    [9]OJ平台(牛客等)中Java的输入方法
    [10]Java在OJ平台提交的方式与基本套路
    [11]OJ中提交Java程序的一些套路

    展开全文
  • Java中Scanner.useDelimiter( )方法使用 在Java语言中,格式化输入是通过类java.util.Scanner来完成的。默认情况下,Scanner是使用“空白”作为分隔符将输入分解为标记,然后使用它所提供的不同的next方法将得到...

    Java中Scanner.useDelimiter( )方法使用


    在Java语言中,格式化输入是通过类java.util.Scanner来完成的。默认情况下,Scanner是使用“空白”作为分隔符将输入分解为标记,然后使用它所提供的不同的next方法将得到的标记转换为不同的类型的值。

    Scanner scan = new Scanner(System.in);
    		System.out.print("请输入:");
    		String year = scan.next();
    		System.out.printf("%s",year);
    

    在这里插入图片描述


    由于Scanner对象将首先跳过输入流开头的所有空白分隔符,然后对输入流中的信息进行检查,直到遇到空白分隔符为止;因此输入数据:this is a test;空白后面的字符:is a test不会显示输出来。

    那如何将含有空格的数据输出呢?

    这时就需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。

    useDelimiter( )方法用法如下

    //useDelimiter("\n"); //“\n”换行符(回车)作为输入的分隔符
    			Scanner scan = new Scanner(System.in).useDelimiter("\n");
    			System.out.print("请输入:");
    			String year = scan.next();
    			System.out.printf("%s",year);
    

    在这里插入图片描述


    可以用useDelimiter()方法,输入可以一起输入年月日

    Scanner scan = new Scanner(System.in).useDelimiter("\\D");// 匹配非数字
    	System.out.print("请输入当前日期(年-月-日):");
    	int year = scan.nextInt();
    	int month = scan.nextInt();
    	int date = scan.nextInt();
    	
    	System.out.println(year);
    	System.out.println(month);
    	System.out.println(date);
    	scan.close();
    

    在这里插入图片描述


    package com.wdzl.demo01;
    
    import java.util.Arrays;
    import java.util.Date;
    import java.util.Scanner;
    /**
     * 格式输出
     */
    public class TestString {
    
    	public static void main(String[] args) {
    		float str = 345.44556F;
    		String format = String.format("计算结果为%7.2f", str);
    		System.out.println(format);
    		
    		Date date = new Date();
    		String year = String.format("今年是:%tY", date);
    		System.out.println(year);
    		String year1 = String.format("%tY-%tm-%td %tH:%tM:%tS", date, date, date, date, date, date);
    		System.out.println(year1);
    		String year2 = String.format("%tF %tT", date,date);
    		
    		System.out.println(year2);
    		System.out.println("*****************");
    		test(args);
    //		test1();
    	}
    	
    	public static void test(String[] args) {
    		String ss = "语文:90.50分,数学96.5分,英语99.8分";
    		//方法1
    //		//分割字符串(分割掉不是数字和点的部分)
    //		//其中的加号“+”表示匹配数字或“.”以外的字符一次或一次以上
    //		String[] scores = ss.split("[^0-9.]+");
    //		System.out.println(Arrays.toString(scores));
    //		for (String string : scores) {
    //			System.out.println(string);
    //		}
    		//方法2
    //		Scanner sc = new Scanner(ss).useDelimiter("[^0-9.]+");
    		Scanner sc = new Scanner(ss);
    		sc.useDelimiter("[^0-9.]+");
    		while(sc.hasNext()) {
    			float score = sc.nextFloat();
    			System.out.println(score);
    		}
    	}
    	public static void test1() {
    		Scanner scan = new Scanner(System.in).useDelimiter("\\D");// 匹配非数字
    		System.out.print("请输入当前日期(年-月-日):");
    		int year = scan.nextInt();
    		int month = scan.nextInt();
    		int date = scan.nextInt();
    		
    		System.out.println(year);
    		System.out.println(month);
    		System.out.println(date);
    		scan.close();
    	}
    
    }
    

    在这里插入图片描述

    展开全文
  • Java中Scanner.useDelimiter( )方法使用

    千次阅读 2019-11-12 19:04:28
    这时就需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。 useDelimiter( )方法用法如下 // useDelimiter ( "\n" ) ; //“\n”换行符(回车)作为输入的分隔符 Scanner scan...

    在Java语言中,格式化输入是通过类java.util.Scanner来完成的。默认情况下,Scanner是使用“空白”作为分隔符将输入分解为标记,然后使用它所提供的不同的next方法将得到的标记转换为不同的类型的值。

    Scanner scan = new Scanner(System.in);
    		System.out.print("请输入:");
    		String year = scan.next();
    		System.out.printf("%s",year);
    

    在这里插入图片描述
    由于Scanner对象将首先跳过输入流开头的所有空白分隔符,然后对输入流中的信息进行检查,直到遇到空白分隔符为止;因此输入数据:this is a test;空白后面的字符:is a test不会显示输出来。

    那如何将含有空格的数据输出呢?

    这时就需要用Scanner.useDelimiter( )方法,可以将分隔符号修改为"回车",或者其他字符。

    useDelimiter( )方法用法如下

    	//useDelimiter("\n"); //“\n”换行符(回车)作为输入的分隔符
    				Scanner scan = new Scanner(System.in).useDelimiter("\n");
    				System.out.print("请输入:");
    				String year = scan.next();
    				System.out.printf("%s",year);
    

    在这里插入图片描述

    展开全文
  • usedelimiter 扫描器类useDelimiter()方法 (Scanner Class useDelimiter() method) Syntax: 句法: public Scanner skip(Pattern patt); public Scanner skip(String patt); useDelimiter() method is ...

    usedelimiter

    扫描器类useDelimiter()方法 (Scanner Class useDelimiter() method)

    Syntax:

    句法:

        public Scanner skip(Pattern patt);
        public Scanner skip(String patt);
    
    
    • useDelimiter() method is available in java.util package.

      useDelimiter()方法在java.util包中可用。

    • useDelimiter(Pattern patt) method is used to put the delimiter pattern to the given pattern (patt) of this Scanner.

      useDelimiter(Pattern patt)方法用于将分隔符图案放入此扫描仪的给定图案(图案)。

    • useDelimiter(String patt) method is used to put the delimiter pattern to the pattern formed from the given string (patt) of this Scanner.

      useDelimiter(String patt)方法用于将定界符模式放入由此Scanner的给定字符串(patt)形成的模式。

    • These methods don’t throw an exception at the time of the set delimiter pattern.

      在设置定界符模式时,这些方法不会引发异常。

    • These are non-static methods and it is accessible with the class object only and if we try to access these methods with the class name then we will get an error.

      这些是非静态方法,只能通过类对象访问,如果尝试使用类名称访问这些方法,则会收到错误消息。

    Parameter(s):

    参数:

    • In the first case, useDelimiter(Pattern patt),

      在第一种情况下,请使用useDelimiter(Pattern patt)

      • Pattern patt – represents the delimiter pattern.
      • 模式patt –表示定界符模式。
    • In the second case, useDelimiter(String patt),

      在第二种情况下,请使用useDelimiter(String patt)

      • String patt – represents a string denoting the delimiter pattern.
      • 字符串patt –表示表示定界符模式的字符串。

    Return value:

    返回值:

    In both the cases, the return type of the method is Scanner, it retrieves this Scanner object.

    在这两种情况下,方法的返回类型均为Scanner ,它将检索此Scanner对象。

    Example 1:

    范例1:

    // Java program to demonstrate the example 
    // of useDelimiter() method of Scanner
    
    import java.util.*;
    import java.util.regex.*;
    
    public class UseDelimiter {
     public static void main(String[] args) {
      String str = "Java Programming! 3 * 8= 24";
    
      // Instantiates Scanner
      Scanner sc = new Scanner(str);
    
      // By using useDelimiter(Pattern) method
      // is to use delimiter set by the given
      // pattern
      sc.useDelimiter(Pattern.compile("IH--"));
      System.out.println("sc.useDelimiter(Pattern): " + sc.delimiter());
    
      // Scanner closed
      sc.close();
     }
    }
    
    

    Output

    输出量

    sc.useDelimiter(Pattern): IH--
    
    

    Example 2:

    范例2:

    import java.util.*;
    import java.util.regex.*;
    
    public class UseDelimiter {
     public static void main(String[] args) {
      String str = "Java Programming! 3 * 8= 24";
    
      // Instantiates Scanner
      Scanner sc = new Scanner(str);
    
      // By using useDelimiter(String) method
      // is to use delimiter set by the given
      // string
      sc.useDelimiter("IH--");
      System.out.println("sc.useDelimiter(String): " + sc.delimiter());
    
      // Scanner closed
      sc.close();
     }
    }
    
    

    Output

    输出量

    sc.useDelimiter(String): IH--
    
    
    

    翻译自: https://www.includehelp.com/java/scanner-usedelimiter-method-with-example.aspx

    usedelimiter

    展开全文
  • useDelimiter指定多个分隔符

    千次阅读 2017-09-07 15:22:30
    Scanner的useDelimiter方法是支持正则表达式的。假设一个字符串你想通过感叹号或者问号分割,这么写useDelimiter(“[!?]”)就可以了。
  • Java scanner split useDelimiter 用法小议

    千次阅读 2016-01-01 19:30:40
    sin.useDelimiter(","); while(sin.hasNext()) {  System.out.println(sin.next());  } */ /* Usage: use system.in as scanner's data source *  */ out.print("enter number ...
  • Scanner 类 useDelimiter("")用法

    千次阅读 2014-04-30 11:03:53
     sc.useDelimiter(" 分隔符 ");  默认是空格                while (sc.hasNext()) {                        System.out.println(sc.next());                  } ...
  • //sc.useDelimiter("a"); while (sc.hasNext()) { System.out.println("hasNext()判断为true,我还有下一个:"); System.out.println("下一个输出是:"+sc.next()); } } } Scanner默认使用的...
  • java useDelimiter的使用

    千次阅读 2012-05-13 09:30:42
     Scanner scanner = new Scanner(System.in).useDelimiter(","); //以','为分隔符    int i=0;  while(scanner.hasNextInt()){    i++;   System.out.println(scanner.nextInt()); if(i=...
  • sc.useDelimiter(" 分隔符 "); 默认是空格   while (sc.hasNext()) {   System.out.println(sc.next());   }    sc.close();   }  }  如果 words.txt 文件中的内容是:“ So she ...
  • scanner.useDelimiter( "\n" ); String str = scanner.next(); // 打印获取到的内容和其长度,以及最后一个字符的ASCII码 System.out.println(str + ":" + str.length() + " (" + str.codePointAt(str....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,710
精华内容 1,484
关键字:

usedelimiter