如何拆分字符串以获得某个字符和不确定字符之间的句子

时间:2011-03-17 17:51:05

标签: java string split

String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET="Av. Hidalgo 77, Col. Guerrero", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";

我有那个,原谅西班牙语。如何在“CN =”之后获得所有字符CN属性可能不会始终位于字符串的末尾,并且可能在其后面有任何字符。

在这种特殊情况下,CN =很方便地落在字符串的末尾,但它可能以逗号或其他字符结尾,而不是字母或数字。

像:

CN=A.C. del Servicio de Administración Tributaria/email
CN=A.C. del Servicio de Administración Tributaria,  Somethings.

我只想要斜杠和逗号之前以及等于之后的值。

5 个答案:

答案 0 :(得分:1)

您可以假设“CN”元素将始终位于字符串的末尾或后跟另一个“X = Y”序列,因此您可以尝试这样:

Pattern p = Pattern.compile("CN=(.*?)($|, [A-Z]+)=.*");
Matcher m = p.matcher(myString);
if (m.find()) {
  // Now m.group(1) contains the value associated with "CN".
}

答案 1 :(得分:1)

String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET="Av. Hidalgo 77, Col. Guerrero", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";

int indexCn = myString.indexOf("CN");
int indexComma = myString(",", indexCn );
return indexComma == -1 ? myString.substring( indexCn ) : myString.substring( indexCn, indexComma - indexCn );

您需要处理两种情况

  1. CN是最后一个元素(因此之后没有逗号,只是String的结尾)
  2. CN位于中间位置,因此我们使用逗号作为分隔符。

答案 2 :(得分:1)

String myString = "OID.1.2.840.113549.1.9.2=Responsable: Fernando Martínez Coss, L=Cuauhtemoc, ST=Distrito Federal, C=MX, OID.2.5.4.17=06300, STREET=\"Av. Hidalgo 77, Col. Guerrero\", EMAILADDRESS=acods@sat.gob.mx, O=Servicio de Administración Tributaria, CN=A.C. del Servicio de Administración Tributaria";

Pattern pattern = Pattern.compile("CN=([^,]*)");

Matcher matcher = pattern.matcher(myString);

if(matcher.find())
{
    System.out.println(matcher.group(1));
}

答案 3 :(得分:1)

你可以用这种方式不用regexp来做到这一点 - 特别是如果你想要检索更多的参数,这可能是好的

示例1

String myString = ...;
String[] firstSplit = myString.split(",");
for (int i=0; i<firstSplit.length; i++) {
    String[] secondSplit = firstSplit[i].split("=");
    if ("CN".equals(secondSplit[0].trim())) {
        System.out.println(secondSplit[1]);
    }
}

但这只有在你只使用“,”来分隔参数时才有效。如果你不能像分隔符那样对待“,”那么最好的方法就是regexp或indexof方法

答案 4 :(得分:1)

更新问题:

result = myS.replaceAll (".*CN=", "").replaceAll ("[,/].*", "");
result = result.replaceAll ("[A-Z0-9.]+=", "");

(再次更新,包含更新问题中的[,/])。 (再次更新,以回应最新评论)