我想从长字符串中提取一个数字 我的代码是:
private String[] icons;
private String[] pages;
icons=geticons.split(";");
pages=article.split(";");
int i=0;
for (String page:pages)
{
pages[i].replaceAll("(image)([0-9])", icons[$2]);
i++;
}
但图标[$ 2]错误。 如何解决它。
示例: 图标元素:
{"yahoo.com/logo.jpg" , "yahoo.com/logo3.jpg", "yahoo.com/logo8.jpg"}
页面元素:
"hello how image0 ar you? where image3 are you? image8"
输出:
"hello how yahoo.com/logo.jpg ar you? where yahoo.com/logo3.jpg are you? yahoo.com/logo8.jpg"
答案 0 :(得分:0)
首先,你的for循环毫无意义。要么使用 i ,要么完全省略它:
for (String page:pages) {
page.replaceAll("(image)([0-9])", icons[2]);
}
其次,java中数组中的元素可以通过索引直接访问:
arr[index]
在您的情况下,那将是be icons[2]
最后,您的正则表达式将仅考虑图像名称中的一位数。因此,如果你有image10,它将无法正确识别。我会用:
"(image)([0-9]+)"
因为+量词意味着“一次或多次”。另外,您可以将[0-9]
替换为表示数字的\\d
。
答案 1 :(得分:0)
试试这个:
Pattern pattern = Pattern.compile("(image)([0-9]+)");
for(int i = 0; i < pages.length; i++) {
Matcher matcher = pattern.matcher(pages[i]);
while(matcher.find()) {
String imageNumber = matcher.group(2); // I guess this is what you wanted to get with '$2'
int n = Integer.parseInt(imageNumber);
pages[i] = pages[i].replace(matcher.group(0), icons[n]);
}
}