如果我有一个看起来像这样的字符串:
String text = "id=2009,name=Susie,city=Berlin,phone=0723178,birthday=1991-12-07";
我只想获得信息name
和phone
。我知道如何解析整个String,但在我的具体情况下,只获取这两个“字段”很重要。
那么让我的搜索方法执行以下操作的最佳/最有效方法是什么:
搜索子字符串“name =”并返回其后的子字符串(“Susie”),直到它到达下一个逗号
我的方法是:
关于如何更有效地使用更精简的代码,可能还有其他任何建议吗?感谢您的任何输入
答案 0 :(得分:6)
您可以使用以下正则表达式捕获phone
和name
之后的预期单词,并从匹配对象中获取frist组:
(?:phone|name)=([^,]+)
关于以下命令,如果它可能恰好包含一个包含phone
或name
的单词作为更全面的方式,则可以在您的名字前面添加一个逗号。
(?:^|,)(?:phone|name)=([^,]+)
详细了解正则表达式http://www.regular-expressions.info/
答案 1 :(得分:0)
正则表达式可能更有效,但为了便于阅读,我<3 Guava
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
onDrawReady = true;
// for eraser
canvas.saveLayerAlpha(0, 0, canvas.getWidth(), canvas.getHeight(), 0xff, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
imageRenderedAtLeastOnce = true;
if (delayedZoomVariables != null) {
setZoom(delayedZoomVariables.scale, delayedZoomVariables.focusX,
delayedZoomVariables.focusY, delayedZoomVariables.scaleType);
delayedZoomVariables = null;
}
canvas.concat(matrix);
for (DrawObject d : paths) {
if (d.getType() == MODE_DRAWING) {
canvas.drawPath(d.getPair().first, d.getPair().second);
} else if (d.getType() == MODE_TEXT) {
canvas.drawText(d.getText(), d.getX(), d.getY(),
d.getPair().second);
} else if (d.getType() == MODE_ARROW) {
canvas.drawLine(d.getStartX(), d.getStartY(), d.getX(),
d.getY(), d.getPair().second);
fillArrow(canvas, d.getStartX(), d.getStartY(), d.getX(),
d.getY(), d.getPair().second);
} else if (d.getType() == MODE_CIRCLE) {
RectF oval2 = new RectF(d.getStartX(), d.getStartY(), d.getX(),
d.getY());
canvas.drawOval(oval2, d.getPair().second);
} else if (d.getType() == MODE_RECTANGLE) {
canvas.drawRect(d.getStartX(), d.getStartY(), d.getX(),
d.getY(), d.getPair().second);
} else if (d.getType() == MODE_ERASE) {
canvas.drawPath(d.getPair().first, d.getPair().second);
}
}
canvas.save();
}