在逗号分隔字符串中查找值的更好方法(Java/Android)

Sta*_*wed 2 java regex android

假设定义了一个String:

String list = "apples,orange,bears,1,100,20,apple";
Run Code Online (Sandbox Code Playgroud)

如果不将列表分成集合或数组,是否有更好的方法在列表中查找字符串?例如,如果我搜索"bear",应该没有结果,因为没有完全匹配(bears不计数).您无法查找" ,bear,"因为无法保证单词bear不会出现在文件的开头或结尾.

Jer*_*rry 7

您仍然可以使用以下内容:

(^|,)bears(,|$)
Run Code Online (Sandbox Code Playgroud)

它会查找逗号,或者行的开头或结尾,我相信这就是你要找的东西.

编辑:附录

由于Denomales提到它,上面的正则表达式搜索将使用它可以找到的任何逗号(如果有的话),这样你就可以获得重叠匹配,就像列表那样apples,orange,bears,honey,bears,bears,bears,bears,9999,bees,只会计算出现有5个中的3个熊.在这种情况下你可以做的是使用lookarounds.可能需要一点时间来了解它们,但它的要点是它们在没有消耗它们的情况下向后看,或者在角色之前.这样就可以找到所有5只熊,这就是你如何使用它们:

(?<=^|,)bears(?=,|$)
Run Code Online (Sandbox Code Playgroud)

字符细分......

^ 表示行的开头,以便在没有逗号的情况下,您仍然可以获得匹配.

, 是一个字面逗号.

(?<= ... )是一个积极的外观,并将看到b角色背后,bears以确保内部有什么,这是一个^或一个,.

(?= ... )是一个积极的向前看,并将照顾s角色,bears以确保内部有什么,这是一个,或一个$.

$意味着一条线的终点,非常像^,但最后.