我正在为我的世界创建一个bukkit插件,我需要先了解一些事情才能继续前进。 我想检查文本是否有这种布局:" B:10 S:5"例如。 它代表买入:金额和卖出:金额 如果它遵循语法,我如何检查最简单的方法? 它可以是0或以上的任何数字。
另一个问题是从文本中获取此数据。如何检查B:和S:之后的文本是什么,并将其作为整数返回
我还没有尝试过,因为我不知道从哪里开始。
感谢您的帮助!
答案 0 :(得分:0)
在您的情况下,^B:(\d)+ S:(\d)+$
就足够了。
在java中,要使用正则表达式:
public class RegExExample {
public static void main(String[] args) {
Pattern p = Pattern.compile("^B:(\d)+ S:(\d)+$");
for (int i = 0; i < args.length; i++)
if (p.matcher(args[i]).matches())
System.out.println( "ARGUMENT #" + i + " IS VALID!")
else
System.out.println( "ARGUMENT #" + i + " IS INVALID!");
}
}
此示例程序从命令行获取输入,根据模式验证它并将结果打印到STDOUT。
答案 1 :(得分:0)
在你给出的简单问题中,你可以得到一个简单的答案。否则,请参阅下面的正则表达式答案。
boolean test(String str){
try{
//String str = "B:10 S:5";
String[] arr = str.split(" ");//split to left and right of space = [B:10,S:5]
String[] bArr = arr[0].split(":");//split ...first colon = [B,10]
String[] sArr = arr[1].split(":");//... second colon = [S,5]
//need to use try/catch here in case the string is not an int value.
String labelB = bArr[0];
Integer b = Integer.parseInt(bArr[1]);
String labelS = sArr[0];
Integer s = Integer.parseInt(sArr[1]);
}catch( Exception e){return false;}
return true;
}
请参阅此处的答案以了解相关任务。更多相关细节如下。 How can I parse a string for a set?
基本上,您需要使用正则表达式并遍历组。为了防止语法不总是B和S,我使这更加抽象。而且,如果中间有额外的白色空间,那么我也做得更广泛。该模式表示有4组(用括号表示):label1,number1,label2和number2。 +表示1或更多。 []表示一组字符。 a-z是一系列字符(不要在A-Z和a-z之间放置任何东西)。还有其他显示字母和数字模式的方法,但这些更容易阅读。
//this is expensive
Pattern p=Pattern.compile("([A-Za-z]+):([0-9]+)[ ]+([A-Za-z]+):([0-9]+)");
boolean test(String txt){
Matcher m=p.matcher(txt);
if(!m.matches())return false;
int groups=m.groupCount();//should only equal 5 (default whole match+4 groups) here, but you can test this
System.out.println("Matched: " + m.group(0));
//Label1 = m.group(1);
//val1 = m.group(2);
//Label2 = m.group(3);
//val2 = m.group(4);
return true;
}