我有字符串" 000134567 - AA - 2001"和" 002134567 - AB - 2001"我想在"之前提取所有数字。 - AA"。但我只想从第一个非零数字开始返回数字。例如,我想要" 134567"或" 2134567"。
是否有一些功能允许我使用MVEL执行此操作?任何帮助表示赞赏。
答案 0 :(得分:0)
我不认为我们可以直接使用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");
使用上面的导入
编译表达式这将只编译表达式并添加导入以供以后评估时使用。
Serializable s = MVEL.compileExpression("outputString(myString)", ctx);
变量变量
您可以按如下方式传递变量,
Map contextMap = new HashMap();
contextMap.put("myString", myString);
您可以根据需要更改功能正文,签名和返回声明。