首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java的Scanner vs String.split()vs StringTokenizer; 我该用哪个?

在这个问题中,您需要了解Java中的三种常用的字符串分割方法:ScannerString.split()StringTokenizer。以下是关于这三种方法的详细信息和它们的优缺点。

Scanner

Scanner是一个用于解析输入的类,它可以解析各种基本数据类型,如intfloatdouble等。Scanner的一个常见用途是从用户输入中读取数据。在处理字符串分割时,Scanner提供了一个useDelimiter()方法,允许您指定一个正则表达式作为分隔符。

优点:

  • 可以解析各种基本数据类型,方便从输入中读取数据。
  • 可以自定义分隔符。

缺点:

  • 相对于String.split()StringTokenizer,性能较低。
  • 需要额外的内存开销。

String.split()

String.split()是一个Java字符串方法,用于根据正则表达式分割字符串。它返回一个字符串数组,包含分割后的子字符串。

优点:

  • 简单易用,只需要一行代码即可实现字符串分割。
  • 性能较好。

缺点:

  • 只能根据正则表达式进行分割,可能不适用于某些特殊场景。
  • 对于大量的字符串分割操作,可能会产生内存碎片。

StringTokenizer

StringTokenizer是一个Java类,用于分割字符串。它返回一个枚举,可以逐个访问分割后的子字符串。

优点:

  • 性能较好。
  • 可以自定义分隔符。

缺点:

  • 需要额外的内存开销。
  • 不支持正则表达式。

推荐

在大多数情况下,String.split()是最佳选择,因为它简单易用,性能较好。然而,如果您需要自定义分隔符,可以考虑使用StringTokenizer。如果您需要从输入中读取数据,可以使用Scanner

在选择时,请根据您的具体需求和性能要求进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Java快速输入输出使用详解(解决Java输入输出超时问题)

    大家好,又见面了,是你们朋友全栈君。 一、背景:   Scanner类输入时,虽然方式很简单,但是输入实在太慢了,经常遇到大数据量时候就超时。...(你觉得数据有点多时就用快速输入即可)   某些题目用Scanner会超时。所以需要输入快一点方法。所以写了这篇,不同方法输入。 二、输入: 1.Scanner 最简单方式,不过比较慢。...import java.util.Scanner; public class ScannerInput { public static void main(String[] args) {...int num = s.nextInt(); // 输入一个整数 double num2 = s.nextDouble(); // 输入一个小数 } } 2.BufferedReader 常用...比较 推荐 使用这个,粘贴到需要用里面,作为内部类。

    1.1K10

    挑战程序竞赛系列(81):4.3 LCA(1)

    很容易理解,在dfs求解时,非叶子结点在vs中均出现了两次,这是因为非叶子结点在访问左孩子结束后,还需返回到当前结点,并继续搜索右孩子,利用上述性质,只需要知道任意两个结点首次被访问时间戳,就可以求出它们...查询某个区间最小值,可以使用RMQ实现log(n)\log(n)查询。 此处,有些很重要性质可以挖掘,比如vs访问顺序已知,那么对于任意两个结点之间路径,可以直接求出。 ?...嘿,这就能够利用BIT高效更新了啊,VS每个结点与前一个结点可以看作是每一条边,那么完全可以把这些信息存入BIT中,那么每当要修改某条边时,能够快速查询到对应BIT位置即可。...; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.StringTokenizer...int[] id = new int[MAX_V]; //各个顶点在vs中首次出现下标 int[] es = new int[MAX_V * 2 - 1]

    83560

    华为OJ机试训练(一)

    大家好,又见面了,是全栈君。 题目1 —— 通过输入英文句子。将每一个单词反过来,标点符号顺序不变。非26个字母且非标点符号情况就可以标识单词结束。 标点符号包含,.!?...] ssString = string.split("\\W+"); String[] s2 = string.split("\\w+"); int wordsNum = ssString.length...程序—— /** * 实现“十七进制”转“十进制”算法: * 输入一个十七进制数字字符串(字母一律大写), * 输出这个数值相应十进制结果,达到进制转换目的, * 范围:0-0xFFFFFFFF...Insert Se,Sa,C6 Input C1 Delete Sc Input C2 Output Input C3 Output End 输出是 : Error Sb Sd 程序...package tree.test; import java.util.ArrayList; import java.util.Scanner; /** * 状态机 * 20:03 * @author

    34740

    Java实例教程(下)

    Java默认构造函数Java参数化构造函数构造函数在Java中重载  Java拷贝构造函数Java静态方法Java静态块Java这个关键字Java StringTokenizer类使用递归Java Factorial...Java转换为大写  Java使用转义分隔符拆分字符串使用正则表达式Java Split StringJava检查String是否为空正确方法Java检查空或空Java StringTokenizer...和String SplitJava字符串拆分  Java检查String是否为空不使用length()方法Java字符串长度Java String.split()方法Java String charAt...用于检查两个字符串是否为anagramJavajava将int转换为StringJava比较字符串和字符串部分Java与equals和compareTo之间区别Java比较要做使用StringTokenizer...是一个单一声明  Java时间方法执行Java静态导入Java通过引用调用Java将String转换为intJava Pass by reference vs Pass by ValueJava嵌套接口

    2.9K20

    20个高级Java面试题汇总

    这是一个高级Java面试系列题中第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。 1. 什么是可变参数? 可变参数允许调用参数数量不同方法。...断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好选择。在public方法中,只用断言来检查它们根本不应该发生情况。 4....Java中常用正则表达式——Patter,Matcher和Scanner类。 12. 什么是令牌化? 令牌化是指在分隔符基础上将一个字符串分割为若干个子字符串。...String.split(regex)函数将regex作为参数。 13. 给出令牌化例子?...40.324,31 有一个微信公众号,经常会分享一些Java技术相关干货。如果你喜欢分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

    1.6K10

    20个高级Java面试题汇总

    这是一个高级Java面试系列题中第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。 1. 什么是可变参数? 可变参数允许调用参数数量不同方法。...断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好选择。在public方法中,只用断言来检查它们根本不应该发生情况。 4....Java中常用正则表达式——Patter,Matcher和Scanner类。 12. 什么是令牌化? 令牌化是指在分隔符基础上将一个字符串分割为若干个子字符串。...String.split(regex)函数将regex作为参数。 13. 给出令牌化例子?...40.324,31 有一个微信公众号,经常会分享一些Java技术相关干货。如果你喜欢分享,可以用微信搜索“Java团长”或者“javatuanzhang”关注。

    2.5K00

    HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)

    不管结果如何,都没关系,下面继续向大家讲解海东集团发展情况: 在最初两年里,HDU发展非常迅速,综合各种ACM算法生成老鼠药效果奇好,据说该药专对老鼠有效,如果被人误食了,没有任何副作用,甚至有传闻说还有健胃效果...假设每个队员能力用一个整数来表示,你能告诉最终结果吗?...Output 对于每个测试实例,请输出比赛结果,结果格式如样例所示(数字和vs之间有且仅有一个空格),其中,HDU比分在前。 每个实例输出占一行。...Sample Input 3 5 2 6 1 3 4 0 Sample Output 6 vs 0 就是各自排好序来比较就可以了。 注意“vs”是小写。 还有空格。...import java.util.Arrays; import java.util.Scanner; public class Main{ public static void main(String

    25710

    javascanner意思_javaScanner s = new Scanner(System.in);分别是什么意思?「建议收藏」

    大家好,又见面了,是你们朋友全栈君。...展开全部 Scanner是一个类,nextDouble()是Scanner成员函数,System.in作为参数传递给Scanner构造函数,使Scanner用62616964757a686964616fe78988e69d8331333366303839...Scanner类简介: Java 5添加了java.util.Scanner类,这是一个用于扫描输入文本实用程序。它是以前StringTokenizer和Matcher类之间某种结合。...这样,除了能使用正则表达式之外,Scanner类还可以任意地对字符串和基本类型(如int和double)数据进行分析。借助于Scanner,可以针对任何要处理文本内容编写自定义语法分析器。...Java通过系统类System实现标准输入/输出功能,定义了3个流变量:in,out,和err.这3个流在Java中都定义为静态变量,可以直接通过System类进行调用。

    64120

    20个高级Java面试题汇总

    这是一个高级Java面试系列题中第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。 什么是可变参数? 可变参数允许调用参数数量不同方法。...断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好选择。在public方法中,只用断言来检查它们根本不应该发生情况。...垃圾回收是Java中自动内存管理另一种叫法。垃圾回收目的是为程序保持尽可能多可用堆(heap)。 JVM会删除堆上不再需要从堆引用对象。 用一个例子解释垃圾回收?...Java中常用正则表达式——Patter,Matcher和Scanner类。 什么是令牌化? 令牌化是指在分隔符基础上将一个字符串分割为若干个子字符串。...String.split(regex)函数将regex作为参数。 给出令牌化例子?

    48120

    String.split()用法以及特殊分隔符注意,ps:|

    转载:http://www.cnblogs.com/mingforyou/archive/2013/09/03/3299569.html 在java.lang包中有String.split()方法,返回是一个数组...在应用中用到一些,给大家总结一下,仅供大家参考: 1、如果用“.”作为分隔的话,必须是如下写法,String.split("\\.")...,这样才能正确分隔开,不能用String.split("."); 2、如果用“|”作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确分隔开,不能用String.split...,把三个都分隔出来,可以用String.split("and|or"); 使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期结果。 ...还有如果想在串中使用"\"字符,则也需要转义.首先要表达"aaaa\bbbb"这个串就应该用"aaaa\\bbbb",如果要分隔就应该这样才能得到正确结果, String[] aa = "aaa\\bbb

    1.2K90
    领券