面试常见问题1: 字符串分割

来源:互联网 发布:sql 不包含指定条件值 编辑:程序博客网 时间:2024/04/30 10:32

下午面试两个同志, 感觉现在的同志们是 Spring, Hibernate 很熟悉, 但是 J2SE 反而陌生了.

可以用两个方法来分割字符串为数组.

1. java.lang.String split() 方法, JDK 1.4 or later

 

split

public String[] split(String regex,

                      int limit)

根据匹配给定的正则表达式来拆分此字符串。

此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。

limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。

例如,字符串 "boo:and:foo" 使用这些参数可生成下列结果:

Regex
Limit
结果

:
2
{ "boo", "and:foo" }

:
5
{ "boo", "and", "foo" }

:
-2
{ "boo", "and", "foo" }

o
5
{ "b", "", ":and:f", "", "" }

o
-2
{ "b", "", ":and:f", "", "" }

o
0
{ "b", "", ":and:f" }

这种形式的方法调用 str.split(regex, n) 产生与以下表达式完全相同的结果:

Pattern.compile(regex).split(str, n)

参数:

regex - 定界正则表达式

limit - 结果阈值,如上所述

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

从以下版本开始:

1.4

另请参见:

Pattern


split

public String[] split(String regex)

根据给定的正则表达式的匹配来拆分此字符串。

该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,结果数组中不包括结尾空字符串。

例如,字符串 "boo:and:foo" 产生带有下面这些表达式的结果:

Regex
结果

:
{ "boo", "and", "foo" }

o
{ "b", "", ":and:f" }

参数:

regex - 定界正则表达式

返回:

字符串数组,根据给定正则表达式的匹配来拆分此字符串,从而生成此数组。

抛出:

PatternSyntaxException - 如果正则表达式的语法无效

从以下版本开始:

1.4

另请参见:

Pattern

2. java.util.Tokenizer JDK 1.0 or later

 

 

string tokenizer 类允许应用程序将字符串分解为标记。tokenization 方法比 StreamTokenizer 类所使用的方法更简单。StringTokenizer 方法不区分标识符、数和带引号的字符串,它们也不识别并跳过注释。

可以在创建时指定,也可以根据每个标记来指定分隔符(分隔标记的字符)集合。

StringTokenizer 的实例有两种行为方式,这取决于它在创建时使用的 returnDelims 标志的值是 true 还是 false

· 如果标志为 false,则分隔符字符用来分隔标记。标记是连续字符(不是分隔符)的最大序列。

· 如果标志为 true,则认为那些分隔符字符本身即为标记。因此标记要么是一个分隔符字符,要么是那些连续字符(不是分隔符)的最大序列。

StringTokenizer 对象在内部维护字符串中要被标记的当前位置。某些操作将此当前位置移至已处理的字符后。

通过截取字符串的一个子串来返回标记,该字符串用于创建 StringTokenizer 对象。

下面是一个使用 tokenizer 的实例。代码如下:

     StringTokenizer st = new StringTokenizer("this is a test");

     while (st.hasMoreTokens()) {

         System.out.println(st.nextToken());

     }

 

输出以下字符串:

     this

     is

     a

     test

StringTokenizer 是出于兼容性的原因而被保留的遗留类(虽然在新代码中并不鼓励使用它)。建议所有寻求此功能的人使用 String split 方法或 java.util.regex 包。

下面的示例阐明了如何使用 String.split 方法将字符串分解为基本标记:

     String[] result = "this is a test".split("//s");

     for (int x=0; x<result.length; x++)

         System.out.println(result[x]);

 

输出以下字符串:

     this

     is

     a

     test

 

从以下版本开始:

JDK1.0

另请参见:

StreamTokenizer

posted on 2007-03-08 18:44 BeanSoft 阅读(1819) 评论(2)  编辑  收藏 所属分类: Java SE

Comments

 

·    # re: 面试常见问题1: 字符串分割

施伟
Posted @ 2007-03-08 22:11
也不能怪大家,也是被这个疯了的社会和行业逼的。根本就没时间去学基础的东西。。。
除非你在大学时代就已经够用功。。。  回复  更多评论   

·    # re: 面试常见问题1: 字符串分割

BeanSoft
Posted @ 2007-03-09 09:23
那没办法, 想吃 Java 这口饭, 不学个差不多也不好找工作. 从大二开始学, 2 年学也差不多了. 我就是这样过来的. 当然就怕没给自己早点定位, 见啥学啥.  回复  更多评论   

 

原创粉丝点击