public class f {
public static void main(String [] args)
{
String text = "To be or not to be, that is the question.";
String delimiters = "[, .]"; //这里[和]起到什么作用?
int [] limits = {0,-1}; //这个int数组,第二个-1有什么用,是不是会计算 *To之前的一位?T是0,那么T之前应该是-1吧。还是怎么理解??

for(int limit : limits)
{
System.out.println("\nAnalysis with limit = " +limit);
String [] tokens = text.split(delimiters,limit);
System.out.println("Number of tokens: " +tokens.length);
for(String token : tokens)
{
System.out.println(token);
}
}
}
}stringtokenclassjava

解决方案 »

  1.   

    public String[] split(String regex,
                          int limit)根据匹配给定的正则表达式来拆分此字符串。 
    此方法返回的数组包含此字符串的子字符串,每个子字符串都由另一个匹配给定表达式的子字符串终止,或者由此字符串末尾终止。数组中的子字符串按它们在此字符串中出现的顺序排列。如果表达式不匹配输入的任何部分,那么所得数组只具有一个元素,即此字符串。 limit 参数控制模式应用的次数,因此影响所得数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符的输入。如果 n 为非正,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。如果 n 为 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。 例如,字符串 "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 - 如果正则表达式的语法无效
      

  2.   

    [, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
    你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
    只不过是text中没有“[”、“]”的字符出现而已。
      

  3.   

    你好,你这么说我确实明白了。但是int [] limits = {0,-1};  我依然不太能理解。能否更加抽象,更简单的说下啊
      

  4.   

    呃,我纠正一下吧这里的[color=#FF0000][, .]
    是正则表达式的字符类,表示的是可以匹配“,”、“ ”(空格)“.”
    并非楼上所说,其实他是正则表达式的一种运用[/color]
    http://blog.csdn.net/kiritor/article/details/8723164
    回答你的下一个问题
    limit
    可选项。该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。 
      

  5.   

    String delimiters = "[, .]"; //这里[和]起到什么作用?
    int [] limits = {0,-1}; //这个int数组,第二个-1有什么用,是不是会计算 *To之前的一位?T是0,那么T之前应该是-1吧。还是怎么理解??归结为的话就是一个问题
    public String[] split(String regex, int limit)的使用
    这个split表示的事,按照regex(正则表达式)的方法连切割字符串数组,limit表示一些限制首先,理解第一个参数。regex是个字符串,简单的理解就是,找到这个字符串regex,将传入的字符串切割成多个字符串数组。
    仅仅按照字符串来切割范围太小例如文中你只能一次切割“.”或者“,”。切割那条语句就需要两次。如果我想一次性按照“.”或者“,”切割呢?
    这时候就引入“正则表达式”,regex英文的意思就是正则表达式,按照我的理解正则表达式实际上就是一个规则表现的文字。
    [, .]表示的事,或者. 。再举例子:[abc]表示 a、b 或 c 。这里的[]就是告诉正则表达式的一些表现规则
    这里有个简单的方法:split public String[] split(String regex)你可以拿来理解下正则表达式的切割。然后,第二个参数limit。原本就是翻译限制的意思。事实上就是用个int类型来表示不同的模式。
    分为三种情况:
    (1)当limt>1时,表示最多切割  limt次。
     String [] tokens = text.split(delimiters,limit);
     tokens的值就是"To be or not to be"和" that is the question."
    末尾的"."还存在。最多切割一次。
    (2)limt=0
    尽可能的切割多次,但是丢弃空字符串。
     String [] tokens = text.split(delimiters,limit);
     tokens的值就是"To be or not to be"和" that is the question"
    末尾的"."被切割(3)limt<0
    尽可能的切割多次,同时包含空字符串。
     String [] tokens = text.split(delimiters,limit);
     tokens的值就是"To be or not to be"和" that is the question"和""
    希望我能说的明白。