Как я могу разбить строку, чтобы получить предложение между определенным символом и неопределенным символом - PullRequest
0 голосов
/ 17 марта 2011

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 ]

1 голос
/ 17 марта 2011

За обновленный вопрос:

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

(обновлено снова, чтобы включить [,/] из обновленного вопроса). (обновлено снова, в ответ на новейший комментарий)

1 голос
/ 17 марта 2011

Вы можете сделать это без регулярных выражений таким образом - особенно это может быть полезно, если вы хотите получить больше параметров

Пример 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]);
    }
}

Но этобудет работать, только если вы будете использовать «,» только для разделения параметров.Если вы не можете рассматривать "," как разделитель, тогда лучшим способом будет регулярное выражение или метод indexof

1 голос
/ 17 марта 2011
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 - последний элемент (поэтому без запятой, просто конец строки)
  2. CN - посередине, поэтомуу нас есть запятая в качестве разделителя.
1 голос
/ 17 марта 2011
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));
}
1 голос
/ 17 марта 2011

Можно предположить, что элемент "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".
}
...