从文本中获取某些数据 - Java

时间:2016-02-25 00:17:13

标签: java string

我正在为我的世界创建一个bukkit插件,我需要先了解一些事情才能继续前进。 我想检查文本是否有这种布局:" B:10 S:5"例如。 它代表买入:金额和卖出:金额 如果它遵循语法,我如何检查最简单的方法? 它可以是0或以上的任何数字。

另一个问题是从文本中获取此数据。如何检查B:和S:之后的文本是什么,并将其作为整数返回

我还没有尝试过,因为我不知道从哪里开始。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

使用Regular Expression

在您的情况下,^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;
    }