我有一个像$29@@rent1@@rent2@@rent3$
这样的字符串。现在,我要检索的只有29
和rent1
,那么我该如何实现呢?我可以在这里使用正则表达式吗
任何回复都会感激不尽。
答案 0 :(得分:2)
您可以使用StringTokenizer设备。
(编辑)的
String STR = "$29@@rent1@@rent2@@rent3$";
StringTokenizer st = new StringTokenizer(STR, "$@");
while(st.hasMoreElements())
Log.v("", "Tokens: " + st.nextToken());
输出:
06-12 11:31:58.228: V/(1045): Tokens: 29
06-12 11:31:58.228: V/(1045): Tokens: rent1
06-12 11:31:58.228: V/(1045): Tokens: rent2
06-12 11:31:58.228: V/(1045): Tokens: rent3
答案 1 :(得分:0)
假设你的字符串总是具有$ {some strings} $的格式,那些字符串是由“@@”连接的元素,你想得到第一个和第二个元素。
如果是这样,第一步是删除源字符串的第一个和最后一个字符:
String new_string = old_string.substring(1, old_string.length() - 1);
接下来,将剩余部分拆分为子字符串数组:
String[] elements = new_string.split("@@");
现在得到你想要的数组。不要忘记检查结果数组的长度。
这是一个片段:
String old_string = "$29@@rent1@@rent2@@rent3$";
// if you don't know how your string looks like, use a try - catch to
// ensure your app will not crush
try {
String new_string = old_string
.substring(1, old_string.length() - 1);
String[] elements = new_string.split("@@");
for (String text : elements) {
System.out.println(text);
}
} catch (Exception er) {
er.printStackTrace();
}
希望有所帮助。
p.s:如果你想在这个问题上使用StringTokenizer,我建议你先阅读这个答案。
答案 2 :(得分:0)
尝试使用正则表达式捕获和非捕获组。虽然拆分它会更有意义(显然......)
public static void main(String[] args) {
String s = "$29@@rent1@@rent2@@rent3$";
Pattern p = Pattern.compile("\\$(\\d+)(?:@@)(\\w+|\\d+).*"); // capture only 29 and rent1, ignore @@
Matcher m = p.matcher(s);
m.find();
System.out.println(m.group(1));
System.out.println(m.group(2));
}
O/P :
29
rent1