Loading... > 作者:日沉云起 > 链接:https://blog.csdn.net/richenyunqi/article/details/84350768 > 来源:CSDN > 作者:Mashiro > 链接:https://www.cnblogs.com/zxhbk/p/13825729.html > 来源:忘忧山的兰木 <div class="tip inlineBlock info"> 当你发现代码相同,使用 c++ 和 Java 分别提交,c++ 通过了而 Java 却没有,可以采取以下方法: </div> ## 用 BufferReader 类和 StringTokenizer 类代替 Scanner 类来读取输入 **由于 BufferReader 类和 Scanner 类对于数据的读取方式不同,所以对读取速度有较大提升** ### 使用不同方法进行读取速度 在读入 10,000,000 个整数时所需时间对比: ![1597056-20190220153340118-2118519897.png][1] 在读入10,000,000 个浮点数时所需时间对比: ![1597056-20190220153430105-806173810.png][2] <div class="tip inlineBlock share"> Java.util.Scanner 类是一个简单的文本扫描类,它可以解析基本数据类型和字符串。它本质上是使用正则表达式去读取不同的数据类型 Java.io.BufferedReader 类为了能够高效的读取字符序列,从字符输入流和字符缓冲区读取文本 BufferedReader 相对于 Scanner 来说要快一点,因为Scanner对输入数据进行正则解析,而BufferedReader只是简单地读取字符序列 </div> ## BufferedReader 使用方法: ``` class Reader { static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer tokenizer = new StringTokenizer(""); static String nextLine() throws IOException{// 读取下一行字符串 return reader.readLine(); } static String next() throws IOException {// 读取下一个字符串 while (!tokenizer.hasMoreTokens()) { tokenizer = new StringTokenizer(reader.readLine()); } return tokenizer.nextToken(); } static int nextInt() throws IOException {// 读取下一个int型数值 return Integer.parseInt(next()); } static double nextDouble() throws IOException {// 读取下一个double型数值 return Double.parseDouble(next()); } } ``` ## 字符串操作 当需要对 String 字符串增添或删除字符时,用 StringBuilder 或 StringBuffer 类来替代 String 类。 <div class="tip inlineBlock success"> 由于 StringBulider 速度比 StringBuffer 快,所以 StringBulider 在比赛中更常用。 </div> Java 中,String 对象是不可变的,所以利用 ```+``` 会建立一个新字符串对象,这是十分费时的,而 StringBuilder 或 StringBuffer 类对象是可变的,可以添加、删除和修改字符。 StringBuffer 类使用方法: ``` //建立一个空StringBuilder对象 StringBuilder s=new StringBuilder(); //建立一个初始化为“0000”字符串的StringBuilder对象 StringBuilder s1=new StringBuilder("0000"); //在StringBuilder对象尾部添加"0000"字符串 s.append("0000"); //在StringBuilder对象的0号索引位置之前添加"1111"字符串 s.insert(0,"1111"); //修改StringBuilder对象5号索引位置的字符为'A'字符 s.setCharAt(5, 'A'); //将StringBuilder对象转换为字符串 String s3=s.toString(); ``` ## 字符串遍历 当需要访问字符串中的某个字符或需要遍历整个字符串的每一个字符时,先用 toCharArray() 方法将 String 转换为 char 数组,再进行遍历,不要使用 String 的 CharAt 方法 [1]: https://blog.mol.ink/usr/uploads/2022/04/3516057277.png [2]: https://blog.mol.ink/usr/uploads/2022/04/1992019760.png © Reprinted from other stations Like 0 If you think my article is useful to you, please feel free to appreciate