从 android 中的给定文本中提取值
Exctract values from given text in android
我正在尝试从给定的文本中提取值。
正文如下:
String 1: $.675.00 was spent on your CAPITAL ONE CREDIT Card ending 2123 on 2015-05-04:15:28:08 at Best Buy
String 2: $ 1,310.00 was spent on your Credit Card 5178XXXXXXXX6040 on MAY-04-15 at Amazon Stores.
我想从字符串中提取以下内容:
- $
之后的金额
- 信用卡文字
- 信用卡号(在本例中为 2123 或 5178XXXXXXXX6040)
- 在哪个地方(在本例中为 Best Buy 或 Amazon Stores)。
首先,我尝试从字符串中提取所有数字:我尝试了以下操作:
Pattern p = Pattern.compile("\d+");
Matcher m = p.matcher(string1);
Log.e("Value","from String"+m.group(0));
我总是收到以下错误:
05-05 10:09:35.532: E/AndroidRuntime(13618): java.lang.IllegalStateException: No successful match so far
05-05 10:09:35.532: E/AndroidRuntime(13618): at java.util.regex.Matcher.ensureMatch(Matcher.java:471)
05-05 10:09:35.532: E/AndroidRuntime(13618): at java.util.regex.Matcher.group(Matcher.java:578)
为什么文本中有数字却不匹配?
谢谢!
当您调用 m.group(0)
时,您实际上还没有告诉它尝试匹配内容。这就是它给你一个 IllegalStateException 的原因。
尝试:
while(m.find()) {
Log.e("Value",String.format("From String: '%s'", m.group()));
}
正如@justhecuke 所说,使用模式拆分字符串值没有严格的格式,所以我使用了字符串函数,试一试
String crType1 = "CREDIT Card ending ";//mind the space at end
String crType2 = "Credit Card ";//mind the space at end
String rate, cardNo, at;
if (string1.contains(crType1)) {
rate = getStringValue(string1, "$", " ");
cardNo = getStringValue(string1, crType1, " ");
at = getAddress(string1);
} else {
rate = getStringValue(string1, "$", " ");
cardNo = getStringValue(string1, crType2, " ");
at = getAddress(string1);
}
System.out.println(String.format("Rate : %s Card No : %s Address : %s", rate, cardNo, at));
方法
public static String getAddress(String string) {
return string.substring(string.lastIndexOf("at") + 2, string.length()).trim();
}
public static String getStringValue(String string, String startString, String endString) {
int startAt = string.indexOf(startString) + startString.length();
int endAt = string.indexOf(endString, startAt);
return string.substring(startAt, endAt).trim();
}
我正在尝试从给定的文本中提取值。
正文如下:
String 1: $.675.00 was spent on your CAPITAL ONE CREDIT Card ending 2123 on 2015-05-04:15:28:08 at Best Buy
String 2: $ 1,310.00 was spent on your Credit Card 5178XXXXXXXX6040 on MAY-04-15 at Amazon Stores.
我想从字符串中提取以下内容:
- $ 之后的金额
- 信用卡文字
- 信用卡号(在本例中为 2123 或 5178XXXXXXXX6040)
- 在哪个地方(在本例中为 Best Buy 或 Amazon Stores)。
首先,我尝试从字符串中提取所有数字:我尝试了以下操作:
Pattern p = Pattern.compile("\d+");
Matcher m = p.matcher(string1);
Log.e("Value","from String"+m.group(0));
我总是收到以下错误:
05-05 10:09:35.532: E/AndroidRuntime(13618): java.lang.IllegalStateException: No successful match so far
05-05 10:09:35.532: E/AndroidRuntime(13618): at java.util.regex.Matcher.ensureMatch(Matcher.java:471)
05-05 10:09:35.532: E/AndroidRuntime(13618): at java.util.regex.Matcher.group(Matcher.java:578)
为什么文本中有数字却不匹配?
谢谢!
当您调用 m.group(0)
时,您实际上还没有告诉它尝试匹配内容。这就是它给你一个 IllegalStateException 的原因。
尝试:
while(m.find()) {
Log.e("Value",String.format("From String: '%s'", m.group()));
}
正如@justhecuke 所说,使用模式拆分字符串值没有严格的格式,所以我使用了字符串函数,试一试
String crType1 = "CREDIT Card ending ";//mind the space at end
String crType2 = "Credit Card ";//mind the space at end
String rate, cardNo, at;
if (string1.contains(crType1)) {
rate = getStringValue(string1, "$", " ");
cardNo = getStringValue(string1, crType1, " ");
at = getAddress(string1);
} else {
rate = getStringValue(string1, "$", " ");
cardNo = getStringValue(string1, crType2, " ");
at = getAddress(string1);
}
System.out.println(String.format("Rate : %s Card No : %s Address : %s", rate, cardNo, at));
方法
public static String getAddress(String string) {
return string.substring(string.lastIndexOf("at") + 2, string.length()).trim();
}
public static String getStringValue(String string, String startString, String endString) {
int startAt = string.indexOf(startString) + startString.length();
int endAt = string.indexOf(endString, startAt);
return string.substring(startAt, endAt).trim();
}