面试题答案
一键面试功能差异
split
方法:split
方法是String
类的成员方法,通过传入分隔符将字符串拆分为字符串数组。分隔符可以是普通字符,也可以是正则表达式。例如:
String str = "a,b;c"; String[] parts = str.split("[,;]"); for (String part : parts) { System.out.println(part); }
- 上述代码中,
split
方法使用正则表达式[,;]
作为分隔符,将字符串"a,b;c"
拆分成"a"
、"b"
、"c"
三个部分。
StringTokenizer
类:StringTokenizer
类用于将字符串分割为一个个的“标记”。构造函数接受一个字符串和一个可选的分隔符字符串。例如:
String str = "a,b;c"; StringTokenizer st = new StringTokenizer(str, ",;"); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); }
- 它只能接受普通字符作为分隔符,不能使用正则表达式。而且它提供了
hasMoreTokens
和nextToken
方法按顺序逐个获取标记,不像split
方法直接返回整个字符串数组。
性能差异
split
方法:- 由于
split
方法支持正则表达式,在处理正则表达式时,需要创建Pattern
和Matcher
对象,这会带来额外的性能开销。如果分隔符是简单字符,性能也会因为创建数组等操作受到一定影响。
- 由于
StringTokenizer
类:StringTokenizer
不支持正则表达式,处理简单分隔符时性能相对较好。它在遍历标记时是基于指针移动,不需要像split
那样一次性创建整个字符串数组,在内存使用和遍历效率上对于大数据量字符串的处理可能更有优势。
适用场景差异
split
方法:- 当需要灵活使用正则表达式作为分隔符时,
split
方法更为合适。例如,在处理复杂格式的文本解析,如CSV文件中可能包含多种分隔符的情况。同时,如果需要直接获取拆分后的所有部分形成数组,split
方法的简洁性更突出。
- 当需要灵活使用正则表达式作为分隔符时,
StringTokenizer
类:- 当分隔符是简单字符且需要逐个遍历标记,对性能有一定要求时,
StringTokenizer
更为适用。例如,在一些对性能敏感且分隔符固定简单的文本处理场景,如简单的配置文件解析等。
- 当分隔符是简单字符且需要逐个遍历标记,对性能有一定要求时,