c# - ultimos - ¿Cómo extraigo una subcadena de una cadena hasta que se encuentra el segundo espacio?
split c# ejemplos (13)
:PAG
Solo una nota, creo que la mayoría de los algoritmos aquí no verifican si tiene 2 o más espacios juntos, por lo que podría tener un espacio como la segunda palabra.
No sé si es la mejor manera, pero me divertí un poco al escribirlo: P (lo bueno es que te permite elegir la cantidad de espacios / palabras que quieres tomar)
var text = "a sdasdf ad a";
int numSpaces = 2;
var result = text.TakeWhile(c =>
{
if (c=='' '')
numSpaces--;
if (numSpaces <= 0)
return false;
return true;
});
text = new string(result.ToArray());
También obtuve la respuesta de @ho y la convertí en un ciclo para que pudiera usarla tantas veces como quiera: P
string str = "My Test String hello world";
int numberOfSpaces = 3;
int index = str.IndexOf('' '');
while (--numberOfSpaces>0)
{
index = str.IndexOf('' '', index + 1);
}
string result = str.Substring(0, index);
Tengo una cuerda como esta:
"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"
¿Cómo "o1 1232.5467"
sólo "o1 1232.5467"
?
El número de caracteres a extraer no siempre es el mismo. Por lo tanto, solo quiero extraer hasta que se encuentre el segundo espacio.
Algo como esto:
int i = str.IndexOf('' '');
i = str.IndexOf('' '', i + 1);
return str.Substring(i);
Consigue la posición del primer espacio:
int space1 = theString.IndexOf('' '');
La posición del siguiente espacio después de eso:
int space2 = theString.IndexOf('' '', space1 + 1);
Obtenga la parte de la cadena hasta el segundo espacio:
string firstPart = theString.Substring(0, space2);
El código anterior se coloca en una sola línea:
string firstPart = theString.Substring(0, theString.IndexOf('' '', theString.IndexOf('' '') + 1));
Estaba pensando en este problema para mi propio código y aunque probablemente termine usando algo más simple / más rápido, aquí hay otra solución de Linq que es similar a la que agregó @Francisco.
Simplemente me gusta porque se parece más a lo que realmente quieres hacer: "Toma caracteres mientras que la subcadena resultante tiene menos de 2 espacios".
string input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var substring = input.TakeWhile((c0, index) =>
input.Substring(0, index + 1).Count(c => c == '' '') < 2);
string result = new String(substring.ToArray());
Hay formas más cortas de hacerlo como lo han dicho otros, pero también puedes revisar cada personaje hasta que encuentres un segundo espacio y luego devolver la subcadena correspondiente.
static string Extract(string str)
{
bool end = false;
int length = 0 ;
foreach (char c in str)
{
if (c == '' '' && end == false)
{
end = true;
}
else if (c == '' '' && end == true)
{
break;
}
length++;
}
return str.Substring(0, length);
}
Podrías intentar encontrar el indexOf "o1" primero. Luego extraerlo. Después de esto, divide la cadena usando los caracteres "1232.5467":
string test = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
string header = test.Substring(test.IndexOf("o1 "), "o1 ".Length);
test = test.Substring("o1 ".Length, test.Length - "o1 ".Length);
string[] content = test.Split('' '');
Recomendaría una expresión regular para esto, ya que maneja casos que quizás no hayas considerado.
var input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var regex = new Regex(@"^(.*? .*?) ");
var match = regex.Match(input);
if (match.Success)
{
Console.WriteLine(string.Format("''{0}''", match.Groups[1].Value));
}
Solo usa String.IndexOf dos veces como en:
string str = "My Test String";
int index = str.IndexOf('' '');
index = str.IndexOf('' '', index + 1);
string result = str.Substring(0, index);
Un enfoque directo sería el siguiente:
string[] tokens = str.Split('' '');
string retVal = tokens[0] + " " + tokens[1];
Utilice un regex:.
Match m = Regex.Match(text, @"(.+? .+?) ");
if (m.Success) {
do_something_with(m.Groups[1].Value);
}
string testString = "o1 1232.5467 1232.5467.........";
string secondItem = testString.Split(new char[]{'' ''}, 3)[1];
string[] parts = myString.Split(" ");
string whatIWant = parts[0] + " "+ parts[1];
s.Substring(0, s.IndexOf(" ", s.IndexOf(" ") + 1))