我有字符串“ 000134567-AA-2001”和“ 002134567-AB-2001”,我想提取“--AA”之前的所有数字。但是我只想返回从第一个非零数字开始的数字。例如,我想要“ 134567”或“ 2134567”。
是否有一些功能可以让我使用MVEL做到这一点?任何帮助表示赞赏。
我不认为我们可以直接使用MVEL,但是可以的一点调整可能对我们有所帮助。
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.mvel2.MVEL;
import org.mvel2.ParserContext;
import org.mvel2.integration.VariableResolverFactory;
import org.mvel2.integration.impl.MapVariableResolverFactory;
public class MyTest {
public static void main(String[] args) {
String myString = "000134567 - AA - 2001";
Map contextMap = new HashMap();
contextMap.put("myString", myString);
ParserContext ctx = new ParserContext();
ctx.addPackageImport("java.util.regex");
Serializable s = MVEL.compileExpression("outputString(myString)", ctx);
System.out.println(MVEL.executeExpression(s, contextMap, getMvelFactory(contextMap)));
}
private static VariableResolverFactory getMvelFactory(Map contextMap) {
VariableResolverFactory functionFactory = new MapVariableResolverFactory(contextMap);
MVEL.eval(
"outputString = def (myString) { java.util.regex.Pattern p = java.util.regex.Pattern.compile(\"[0-9]+\"); java.util.regex.Matcher m = p.matcher(myString); if (m.find()) { String output = m.group(); return output.replaceAll(\"^0+\", \"\");}};",
functionFactory);
return functionFactory;
}
}
功能
以下是我用Java编写的函数,我将其包含在其中Mvel VariableResolverFactory
。
outputString = def (myString) {
java.util.regex.Pattern p = java.util.regex.Pattern.compile("[0-9]+");
Matcher m = p.matcher(myString);
if (m.find()) {
String output = m.group();
return output.replaceAll("^0+", "");
}
};
创建解析器上下文并添加导入
由于java.util.regex
软件包不适用于MVEL
,因此我们将显式导入此软件包。
ParserContext ctx = new ParserContext();
ctx.addPackageImport("java.util.regex");
使用上面的Import编译表达式
这将仅编译表达式,并将添加导入以供评估时使用。
Serializable s = MVEL.compileExpression("outputString(myString)", ctx);
可变变量
您可以按以下方式传递变量,
Map contextMap = new HashMap();
contextMap.put("myString", myString);
其余的您可以根据需要更改函数主体,签名和return语句。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句