分词的字符串



我想在java中拆分字符串及其令牌。例如,

String s = "A#B^C&D!ased&acdf@Mhj%"
String temp[] = s.split("[#^&!@%]+");
Current output :-
temp[0] = A
temp[1] = B
temp[2] = C
temp[3] = D
temp[4] = ased
output which i want :-
temp[0] = A#
temp[1] = B^
temp[2] = C&
temp[3] = D!
temp[4] = ased&
My current approach of doing is 
  pos =  find the index of the token in string
  pos = add the size of the token in pos
  charAtPos  = getcharfrom string at index pos
  token = token + charAtPos  

如果你有更好的方法建议。我认为这种方法在非常大的字符串上不是很有效

尝试使用正面查找,这是一个不捕获其输入的正则表达式结构:

String s = "A#B^C&D!ased&acdf@Mhj%";
String temp[] = s.split("(?<=[#^&!@%]+)");

(?<=expr)结构匹配在expr后面的点,而不捕获expr本身,允许您在分隔符后面的位置拆分文本。

如果您必须处理非常大的字符串,您最好编写自己的代码。Java模式匹配引擎是一种很好的通用工具,但通常会被自定义代码超越。

关键是使用Apache Commons StringUtils库之类的东西。这非常容易使用,并且具有标准Java词汇表中缺少的大量函数。 函数:

i = StringUtils.indexOfAny("A#B^C&D!ased&acdf@Mhj%","[#^&!@%]+");

将获得第一个分隔符的索引。这取决于您是否可以切掉前面并遍历数组。

String#split()使用正则表达式查找分割位置,并将从结果中删除匹配组(这些是您通常不想要的令牌)。如果您也想获得令牌,则需要通过使用向前查找向后查找来进行零长度匹配。

String s = "A#B^C&D!ased&acdf@Mhj%"
String temp[] = s.split("(?<=[#^&!@%]+)");

表达式更改为匹配标记后的每个位置,并创建零长度匹配。因此,结果也将包含标记。

split方法拆分regexp的匹配,所以也许它应该是[#|^|&|!|@|%]

相关内容

  • 没有找到相关文章

最新更新