首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA杂项[继续更新]

2012-12-19 
JAVA杂项[持续更新]1. ?变量是否会自动初始化?? ? 在类定义的field,String的值被赋予NULL,int被赋予0。而在

JAVA杂项[持续更新]

1. ?变量是否会自动初始化?

? ? 在类定义的field,String的值被赋予NULL,int被赋予0。而在方法内的String,int没有手动赋值会报编译错误The local?variable s2 may not have been initialized。

?

? ? ?正则表达式 "\\{.*?\\}" ? 会匹配到?"{name}"和"{village?}",这是勉强匹配.

? ? ?正则表达式 "\\{.*+\\}" ? 没有匹配项,这是possessive匹配(不知道怎么翻译了,理解成”全占匹配“也可以吧JAVA杂项[继续更新])。

?


JAVA杂项[继续更新]
?
? ? ? 算法
?? ? ?3种匹配的匹配算法不一样。

? ? ? 约定概念:

目标字符串a:被匹配的字符串,如上面所说的"{name} lives in {village} , which is far from the company."

? ? ? ? 读入字符串r:算法中需要用到的临时字符串变量

? ? ? a. 贪婪匹配

? ? ? ? ? 1) 将整个目标字符串r读入,使读入字符串r=a,如果能够匹配,则返回SUCCESS,退出,否则转入2)。

? ? ? ? ? 2) 如果r的长度>=1:

去掉r末尾的一个字符,如果剩余的字符串能够匹配,则返回SUCESS,退出,否则转入2)。

? ? ? ? ? ? ? 如果此时r的长度为0:

如果""能匹配正则表达式,则返回SUCCESS,退出,否则返回FAIL,退出。

? ? ? ? ? 3) 如果1),2)之后返回SUCCESS,那么去掉a中的r部分,使 a = a - r, r = "",重新进入1)

? ? ? ?b. 勉强匹配

? 与贪婪相反

? 这里为了表达清晰,在引入一个临时变量b

? ? ? ? ? 1)将读入字符串r置为"",使b=a, 如果空字符串能够匹配,则返回SUCESS,退出,否则转入2)

? ? ? ? ? 2)如果r的长度<a的长度

b移出开始的字符,放入r的末尾,如果r能够匹配,返回SUCESS,退出,否则转入2)。

? ? ?如果r的长度==a的长度

如果r能够匹配,返回SUCESS,退出,否则返回FAILURE,退出

? ? ? ? ? 3)如果1),2)之后返回SUCCESS,那么去掉a中的r部分,使 a = a - r, r = "",b="",重新进入1)

? ? ? ?c.全占匹配

? 这个很简单,相当于贪婪的第一步

? 1)将整个目标字符串r读入,使读入字符串r=a,如果能够匹配,则返回SUCCESS,退出,否则返回FAILURE。

? 对于全占匹配,它只匹配一次——整个匹配,就像名字一样。个人觉得它没有什么存在的意义,贪婪正则表达式使用^...$不就可以取代全站匹配了吗?

?

Differences Among Greedy, Reluctant, and Possessive Quantifiers

[QUOTE from http://docs.oracle.com/javase/tutorial/essential/regex/quant.html ]


The reluctant quantifiers, however, take the opposite approach: They start at the beginning of the input string, then reluctantly eat one character at a time looking for a match. The last thing they try is the entire input string.

Finally, the possessive quantifiers always eat the entire input string, trying once (and only once) for a match. Unlike the greedy quantifiers, possessive quantifiers never back off, even if doing so would allow the overall match to succeed.? 按照官方文档的说法,贪婪是从右往左吃,勉强是从左往右吃,全占是一次吃完!

?5.?Class.getResource和ClassLoader.getResource的相对路径的基础路径不一样

?

前者是class本身所在的路径,而后者是classpath。前者有绝对路径概念,后者只有相对路径概念。

?

?

JAVA杂项[继续更新]


JAVA杂项[继续更新]

?

?

代价2 需要在接受方法将unicode形式的字符串转换成原来的字符串

? ? ? ? ?例如收到abc\u4e2d\u6587,就转换为"abc中文"。调用parseUnicodeString("abc\u4e2d\u6587")即可转换为"abc中文"。

?

  

热点排行