当前位置:编程学习 > JAVA >>

一个简单的程序,请帮助我



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);
}
}
}
}

string token class java --------------------编程问答-------------------- 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 - 如果正则表达式的语法无效
--------------------编程问答-------------------- [, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
只不过是text中没有“[”、“]”的字符出现而已。 --------------------编程问答--------------------
引用 2 楼 mantou0611 的回复:
[, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
只不过是text中没有“[”、“]”的字符出现而已。

你好,你这么说我确实明白了。但是int [] limits = {0,-1};  我依然不太能理解。能否更加抽象,更简单的说下啊 --------------------编程问答--------------------
引用 2 楼 mantou0611 的回复:
[, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
只不过是text中没有“[”、“]”的字符出现而已。

呃,我纠正一下吧这里的[color=#FF0000][, .]
是正则表达式的字符类,表示的是可以匹配“,”、“ ”(空格)“.”
并非楼上所说,其实他是正则表达式的一种运用[/color]
http://blog.csdn.net/kiritor/article/details/8723164


引用 3 楼 u010172579 的回复:
引用 2 楼 mantou0611 的回复:[, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
只不过是text中没有“[”、“]”的字符出现而已。
你好,你这么说我确实明白了。但是int [] limits = {0,-1};  我依然不太能理……

回答你的下一个问题
limit
可选项。该值用来限制返回数组中的元素个数(也就是最多分割成几个数组元素,只有为正数时有影响

如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。  --------------------编程问答--------------------
引用 4 楼 kiritor 的回复:
引用 2 楼 mantou0611 的回复:[, .]都是匹配符而已,包括了五个:“[”、“,”、“ ”(空格)、“.”、“]”。
你如果知道“,”、“ ”(空格)、“.”的作用那么你就应该知道“[”、“]”的作用。
只不过是text中没有“[”、“]”的字符出现而已。
呃,我纠正一下吧这里的[color=#FF0000][, .]
是正则表达式的字符类,表示的是……

学习了··· --------------------编程问答-------------------- 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"和""


希望我能说的明白。

  --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 除
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,