【发布时间】:2011-11-04 05:34:27
【问题描述】:
我正在处理字符串,我需要比 Java 中提供的原始功能更高级的功能。
例如,我想返回字符串中第 (n-1) 次和第 n 次出现字符之间的子字符串。
我的问题是,是否有用户已经编写了执行此功能的类,以及许多其他用于字符串操作的类?或者我应该为我需要的每个特定功能挖掘 stackoverflow?
【问题讨论】:
我正在处理字符串,我需要比 Java 中提供的原始功能更高级的功能。
例如,我想返回字符串中第 (n-1) 次和第 n 次出现字符之间的子字符串。
我的问题是,是否有用户已经编写了执行此功能的类,以及许多其他用于字符串操作的类?或者我应该为我需要的每个特定功能挖掘 stackoverflow?
【问题讨论】:
查看 Apache Commons 类 StringUtils,它有很多有趣的方式来处理字符串。
http://commons.apache.org/lang/api-2.3/index.html?org/apache/commons/lang/StringUtils.html
【讨论】:
您看过正则表达式 API 吗?这通常是用字符串做复杂事情的最佳选择:
http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html
按照您要执行的操作,您可以根据模式(在您的情况下为单个字符)遍历字符串,并匹配字符串中的所有内容,但不包括字符的下一个实例称为捕获组。
我已经有一段时间没有编写正则表达式了,但是如果您正在寻找字符 A,那么我认为您可以使用正则表达式 A([^A]*) 并继续匹配该字符串.括号中的东西是一个捕获组,我在下面引用它。要匹配它,您可以在模式上使用 matcher 方法:
在 Matcher 实例上,您需要确保匹配项为真,然后根据需要继续调用 find() 和 group(1),其中 group(1) 将获得括号之间的内容。您可以在循环中使用计数器来确保获得字母的 n-1 个实例。
最后,Pattern 提供了您可以传入的标志,以指示您可能需要的不区分大小写等内容。
如果我在这里犯了一些错误,那么请有人纠正我。就像我说的,我不是每天都写正则表达式,所以我确定我有点离题了。
【讨论】: