¿Como obtener string específicos de una cadena?

En mi app, recibo una cadena 2:35:1F:99:0C:01:00:4C:00:01:2B:3E:0C:00:02:00:02:00:00:00:E7:03:07:00:61:4E:4E:45:54:54:45:02:01:00:00:00:00

En esta cadena de arriba, hay valores fijos y dinámicos. Lo que necesito saber es cómo obtener lo que esta entre :00: y :02:01: (valores fijos) al final. Osea 61:4E:4E:45:54:54:45 (valor dinámico). El análisis de la cadena debe realizarse de derecha a izquierda.

1
задан 18.03.2016, 06:57
3 ответа

Если анализ цепи должен осуществляться с правой стороны до левой стороны, он предложил бы такой метод как этот:

    private String extraerValor(String cadena, String stringInicial, String stringFinal){
        int terminaString = cadena.LastIndexOf(stringFinal);
        String nuevoString = cadena.Substring(0, terminaString);
        int offset = stringInicial.Length;
        int iniciaString = nuevoString.LastIndexOf(stringInicial) + offset;                      
        int cortar = nuevoString.Length - iniciaString;
        nuevoString = nuevoString.Substring(iniciaString, cortar);            
        return nuevoString;
    }

Это пример:

String s = "2:35:1F:99:0C:01:00:4C:00:01:2B:3E:0C:00:02:00:02:00:00:00:E7:03:07:00:61:4E:4E:45:54:54:45:02:01:00:00:00:00";
Console.WriteLine("Mi String final es: " + extraerValor(s, ":00:", ":02:01:"));

имея как вывод:

"Mi String final es: 61:4E:4E:45:54:54:45"
4
ответ дан 24.11.2019, 14:44
  • 1
    Тот же комментарий, что и в B.Shay: не s и # 233; если было значимым оценивать, что " 00" находитесь перед " 02:01". –  11.03.2016, 21:17
  • 2
    Если, сначала eval и # 250; куда - конечный string " 02:01" режется string с начала до этой точки, despu и # 233; s ищется она и #250; ltima совпадение ":00: и quot; что уже быть, и # 237; в перед " 02:01". – Jorgesys♦ 11.03.2016, 21:46
  • 3
    Я только что прочитал это. Он мне кажется совершенным. –  11.03.2016, 21:50

Извините, не espaГ±ol очень хорошо, но:

, Если есть только пример двух (только ":00" и только один ":02:01"), может делает semajante так (pseudocode):

const str Primero = ":00";
const str Segundo = ":02:01";
string s = "2:35:1F:99:0C:01:00:4C:00:01:2B:3E:0C:00:02:00:02:00:00:00:E7:03:07:00:61:4E:4E:45:54:54:45:02:01:00:00:00:00";
int primeroLugar = s.IndexOf(Primero);
int segundoLugar = s.IndexOf(Segundo);
string entre = s.Substring(primeroLugar, segundoLugar-primeroLugar);

UPDATE

, Потому что есть многие ":00", возможно так:

const str Primero = ":00";
const str Segundo = ":02:01";
string s = "2:35:1F:99:0C:01:00:4C:00:01:2B:3E:0C:00:02:00:02:00:00:00:E7:03:07:00:61:4E:4E:45:54:54:45:02:01:00:00:00:00";
int segundoLugar = s.IndexOf(Segundo);
string sMenos = s.Substring(0, segundoLugar);
int primeroLugar = sMenos.LastIndexOf(Primero);
string entre = sMenos.Substring(primeroLugar, segundoLugar-primeroLugar);
3
ответ дан 24.11.2019, 14:44
  • 1
    Но:00: он повторяется в цепи – Alejandro Maisonnat 11.03.2016, 18:15
  • 2
    ":02:01" только однажды? – B. Clay Shannon 11.03.2016, 18:22
  • 3
    S и # 237; эта информация установлена – Alejandro Maisonnat 11.03.2016, 18:29
  • 4
    Привет B.Clay. Я издал вопрос для того, чтобы была понята лучше проблема и возможные решения, которые было нужно предлагать. –  11.03.2016, 18:36
  • 5
    Для твоей новости soluci и # 243; n, не s и # 233; если было значимым оценивать, что "00" находился перед "02:01". –  11.03.2016, 18:45

CreerГ, - в который с помощью @B.Clary Шаннон encontrГ© ответ. в continuaciГіn cГіdigo.

               const string Primero = ":00:";
                const string Segundo = ":02:01:";
               string s = "2:35:1F:99:0C:01:00:4C:00:01:2B:3E:0C:00:02:00:02:00:00:00:E7:03:07:00:61:4E:4E:45:54:54:45:02:01:00:00:00:00";
                int segundoLugar = s.IndexOf(Segundo);
                string sMenos = s.Substring(0, segundoLugar);
                int primeroLugar = sMenos.LastIndexOf(Primero);
                string entre = sMenos.Substring(primeroLugar, segundoLugar - primeroLugar);
                string CharName = entre.Substring(4);

 Console.WriteLine(CharName);
2
ответ дан 24.11.2019, 14:44