마인 크래프트 용 bukkit 플러그인을 만들고 있는데 계속 진행하기 전에 몇 가지 사항을 알아야합니다. 텍스트에이 레이아웃이 있는지 확인하고 싶습니다. 예를 들어 "B : 10 S : 5"입니다. Buy : amount 및 Sell : amount를 의미합니다. 구문을 따르는 경우 가장 쉬운 방법을 어떻게 확인할 수 있습니까? 0 이상의 숫자가 될 수 있습니다.
또 다른 문제는 텍스트에서이 데이터를 가져 오는 것입니다. B :와 S : 뒤에 어떤 텍스트가 있는지 확인하고 정수로 반환하려면 어떻게해야하나요?
어디서부터 시작해야할지 모르기 때문에 아직 시도하지 않았습니다.
도와 주셔서 감사합니다!
당신이 준 간단한 문제에서 당신은 간단한 대답으로 벗어날 수 있습니다. 그렇지 않으면 아래의 정규식 답변을 참조하십시오.
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;
}
관련 작업에 대해서는 여기에서 내 대답을 참조하십시오. 자세한 내용은 아래에서 확인하세요. 집합의 문자열을 어떻게 구문 분석 할 수 있습니까?
기본적으로 정규식을 사용하고 그룹을 반복해야합니다. 문법이 항상 B와 S가 아닌 경우를 대비하여 좀 더 추상적으로 만들었고, 어떤 이유로 든 중간에 여백이 더 있으면 더 넓게 만들었습니다. 패턴은 label1, number1, label2 및 number2의 4 개의 그룹 (괄호로 표시됨)이 있음을 나타냅니다. +는 1 이상을 의미합니다. []는 문자 집합을 의미합니다. az는 문자 범위입니다 (AZ와 az 사이에 아무것도 넣지 마십시오). 알파벳 및 숫자 패턴을 표시하는 다른 방법도 있지만 읽기가 더 쉽습니다.
//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;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다