2016-07-28 33 views
1

Ich habe eine Zeichenfolge FILENAME, die tatsächlich die Dateinamen in einer foreach-Schleife enthält. Die Zeichenkette ist etwas wie:erhalten 2 Zeichen aus einer Zeichenfolge

MyFile_TEST_INDIA_20160728 
MyFile_TEST_AMERICA_20160728  
MyFile_TEST_GERMANY_20160728 

Ich brauche die ersten 2 Zeichen des Namens des Landes. Ich versuchte es mit dem folgenden:

String rmtdir = Filename.substring(Filename.length() - 12, Filename.length() - 12); 
System.out.println(rmtdir); 

Aber mit diesem konnte ich nur die erforderlichen Daten für Indien erhalten.
Für andere Länder muss ich den zweiten Teil des Teilstrings manuell aktualisieren, wobei die erweiterte Länge der Länder berücksichtigt wird.

wie für Amerika und Deutschland:

String rmtdir = Filename.substring(Filename.length() - 12, Filename.length() - 14); 

Gibt es eine Möglichkeit, um den Startindex und ausgewählte Anzahl von Positionen zu gehen ausgewählt werden?

+0

Ist Ihr Muster Dateiname gleich? Wird es MyFIle_TEST_United_Kingdom_xxx sein? – aksappy

Antwort

6

das Format Unter der Annahme, wie die beiden Beispiele ist, würde ich split() und substring()

String test = "MyFile_TEST_INDIA_20160728"; 
String countryCode = test.split("_")[2].substring(0,2); 
System.out.println(countryCode); // print IN 
+1

Vielen Dank für solch ein einfaches, aber genaues Stück. Ich bin neu in Java. :) – Meen

+0

Sie sind herzlich willkommen @Meen, wir alle waren früher mal neu, viel Spaß beim Lernen, es ist großartig! :-) –

0

Wenn das Format festgelegt ist, als Sie es wie folgt

String rmtdir=Filename.substring(12, 14); 
1

bekommen Angenommen, dieser Teil "MyFile_TEST_" wird behoben, können wir indexof und substring verwenden.

public static void main(String[] args) { 
    //String str = "MyFile_TEST_INDIA_20160728"; 
    //String str = "MyFile_TEST_AMERICA_20160728"; 
    String str = "MyFile_TEST_GERMANY_20160728"; 

    int startIndex = str.indexOf("T_")+2; 
    int endIndex = str.indexOf("T_")+4; 

    System.out.println(str.substring(startIndex, endIndex)); 

    } 

Ausgang - IN, AM und GE

0

können Sie Regex auch verwenden: - Demo for regex

String s = "MyFile_TEST_INDIA_20160728";  
String s2 = s.replaceAll("^\\w+_([a-zA-Z]+)_\\d+$", "$1").substring(0, 2); 

Out Put wird:

IN 
0

Sie regelmäßig verwenden könnte Ausdruck, um die Zeichenfolge in Gruppen aufzuteilen.

(file)_(desc)_(country)_(date) 

Das kann zunächst drei von der regex abgestimmt werden [^_]+: In Ihrem Fall MyFile_TEST_INDIA_20160728 könnte in die Gruppen unterteilt werden. Bedeutung einer Gruppe von Zeichen, die kein Unterstrich ist. Für das Datum benötigen Sie 8 Ziffern genau \\d{8}. Insgesamt ist dieser regex ist:

[^_]+_[^_]+_[^_]+_\\d{6} 
// or with groups 
([^_]+)_([^_]+)_([^_]+)_(\\d{6}) 

Nun, da Sie einen regulären Ausdruck haben Sie es analysieren eine Zeichenfolge in Java unter Verwendung des Pattern und Matcher Klasse verwenden können.

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
... 

String text = "MyFile_TEST_INDIA_20160728"; 
String regex = "([^_]+)_([^_]+)_([^_]+)_(\\d{8})"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(text); 
matcher.find(); 

System.out.println("file: " + matcher.group(1)); 
System.out.println("desc: " + matcher.group(2)); 
System.out.println("country: " + matcher.group(3)); 
System.out.println("date: " + matcher.group(4)); 

Dann bekommen die ersten beiden Buchstaben des Landes ist recht einfach:

String country = matcher.group(3).substring(0, 2); 
System.out.println("country: " + country);