2011-09-23 1 views
11

Ho una stringa simile a SMITH 09-15 # 4-01H6 FINAL 07-02-2011.dwg e ho bisogno di ottenere tutto fino alla parola FINALE compreso lo spazio prima la F. Quindi l'output sarebbe SMITH 09-15 # 4-01H6 Come posso ottenere questo? string.substring? regex? molte grazieTrova sottostringa in una stringa utilizzando C#

+0

È necessario fornire più di un esempio per consentirci di vedere il modello. – Jason

+0

Una funzione di sottostringa ti aiuterà solo se la lunghezza della stringa desiderata è una costante (o, lavorando dalla fine della stringa, se la lunghezza che desideri troncare è costante, che sembra più probabile nel tuo caso). –

+1

WOW, 7 risposte in circa 2 minuti! – VoodooChild

risposta

22

IndexOf ("FINALE") otterrà l'indice di FINALE. Quindi ottenere la sottostringa da 0 a quell'indice.

Aggiornamento: non dimenticare l'opzione StringComparison corretta.

+3

Sto cercando un nome contenente "FINAL" per dimostrare che fallirà ... non ancora fortunato, ma LastIndexOf dovrebbe essere utilizzato da IndexOf. – daniloquio

+0

Farai un grido finale: http://torrentz.eu/users/finalio jeje non ha trovato un nome contenente finale. – daniloquio

+0

È una ricerca case sensitive, quindi solo se scrive il suo nome in maiuscolo. Ma punto assunto. LastIndexOf() –

3

Un'espressione regolare è probabilmente più di uccidere, una semplice String.Substring come:

string original = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg"; 
int pos = original.IndexOf("FINAL"); 
string new = original.Substring(0, pos); 
3

Prova questo:

string data = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg"; 
string result = data.Substring(0, data.IndexOf("FINAL")); 
2

Questo dovrebbe farlo per voi:

string str = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg" 
string substring = str.Substring(0, str.IndexOf("FINAL")) 

Nel codice in alto, la sottostringa inizia con l'indice 0 e quindi raggiunge una lunghezza della posizione di "FINALE" (start char)

6

Utilizzando String.Substring() metodo

String a = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg" 
String b = a.Substring(0, a.IndexOf("FINAL")); 

io non suggerirei di usare espressioni regolari anche in questo caso è più pesante di questo codice.

4

Nell'esempio seguente, cuttedOne sarà uguale a "SMITH 09-15 # 4-01H6".

string yourString = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg"; 
string cuttedOne = yourString.Substring(0, yourString.LastIndexOf("FINAL")); 

È necessario utilizzare LastIndexOf anziché IndexOf; altrimenti se l'input è "CARFINALTH 09-15 # 4-01H6 FINAL 07-02-2011.dwg" otterrai come risultato "CAR".

1

Solo per questa stringa è possibile trovare l'indice F e utilizzare String.Substring(0,indexofF).

codice come questo

private static int ReturnIndexOfAGivenCharacterInAString(string str, string s) 
{ 
    int index = str.IndexOf(s); 
    return index; 
} 

private static string ReturnSubStringOfAGivenStringByLength(string str, string s) 
{ 
    int indexOfS = ReturnIndexOfAGivenCharacterInAString(str,s); 
    string subString = str.Substring(0,indexOfS); 
    return subString;  
} 
private static string ReturnSubStringOfMyString() 
{ 
    string myString = "SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg"; 
    //As I pointed earlier you can use F for this string because there is no other F in it 
    //no need for checking FINAL 
    string subStringOfMyString = ReturnSubStringOfAGivenStringByLength(myString,"F"); 
} 

Ora è possibile chiamare ReturnSubStringOfMyString() per ottenere ciò che si vuole, e si può anche chiamare ReturnSubStringOfAGivenStringByLength(string,string) -questo può essere utilizzato per qualsiasi String come ReturnSubStringOfAGivenStringByLength("SMITH 09-15 #4-01H6 FINAL 07-02-2011.dwg","F").