[java] 두 문자 사이에 문자열을 가져 오는 방법은 무엇입니까?


Answers

이렇게 해봐.

String s="test string(67)";
String requiredString = s.substring(s.indexOf("(") + 1, s.indexOf(")"));

부분 문자열에 대한 메소드의 서명은 다음과 같습니다.

s.substring(int start, int end);
Question

나는 문자열이있다.

String s = "test string (67)";

나는 (와) 사이의 문자열 인 no 67을 얻고 싶다.

아무도 이걸하는 방법을 말해 줄 수 있습니까?




Pattern and Matcher

public class Chk {

    public static void main(String[] args) {

        String s = "test string (67)";
        ArrayList<String> arL = new ArrayList<String>();
        ArrayList<String> inL = new ArrayList<String>();

        Pattern pat = Pattern.compile("\\(\\w+\\)");
        Matcher mat = pat.matcher(s);

        while (mat.find()) {

            arL.add(mat.group());
            System.out.println(mat.group());

        }

        for (String sx : arL) {

            Pattern p = Pattern.compile("(\\w+)");
            Matcher m = p.matcher(sx);

            while (m.find()) {

                inL.add(m.group());
                System.out.println(m.group());
            }
        }

        System.out.println(inL);

    }

}



이 같은:

public static String innerSubString(String txt, char prefix, char suffix) {

    if(txt != null && txt.length() > 1) {

        int start = 0, end = 0;
        char token;
        for(int i = 0; i < txt.length(); i++) {
            token = txt.charAt(i);
            if(token == prefix)
                start = i;
            else if(token == suffix)
                end = i;
        }

        if(start + 1 < end)
            return txt.substring(start+1, end);

    }

    return null;
}



한 줄에 다음과 같이 제안합니다.

String input = "test string (67)";
input = input.subString(input.indexOf("(")+1, input.lastIndexOf(")"));
System.out.println(input);`



String result = s.substring(s.indexOf("(") + 1, s.indexOf(")"));



당신이 할 수있는 아파치 공용 라이브러리의 StringUtils 이것을 할 수 있습니다.

import org.apache.commons.lang3.StringUtils;
...
String s = "test string (67)";
s = StringUtils.substringBetween(s, "(", ")");
....



첫 번째 브래킷 앞에있는 모든 문자를 버리고 첫 번째 브래킷 뒤에 문자를 기록한 다음 두 번째 브래킷 뒤에 문자를 버리면 처음부터 문자열을 파싱하는 것이 일반적인 방법입니다.

나는 거기에 정규식 라이브러리 또는 뭔가 그것을 할 확신합니다.




정규식을 사용하여 :

 String s = "test string (67)";
 Pattern p = Pattern.compile("\\(.*?\\)");
 Matcher m = p.matcher(s);
 if(m.find())
    System.out.println(m.group().subSequence(1, m.group().length()-1)); 



Related



Tags

java java   string