String in Java von hinten abschneiden?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hey,

Regex geht, alles an den Slashes splitten geht.

Aber in deinem Fall würde ich es mir einfach machen und einfach String.lastIndexOf benutzen, das liefert dir die letzte Position eines Vorkommens im String:

String myStr = "Hello planet earth, you are a great planet.";
System.out.println(myStr.lastIndexOf("planet"));

https://www.w3schools.com/java/ref_string_lastindexof.asp

Das kombinierst Du einfach mit String.substring

So ungefähr:

String input = "/var/opt/prog/prog-data/repo/xyz-test/test.git";

int indexOfRepo = input.lastIndexOf("repo");
String subPath = input.substring(indexOfRepo);

Je nach use case kann es aber auch lohnen den Pfad wirklich als Path-Objekt zu nutzen wie das auch vorgeschlagen wurde. Kommt wirklich drauf an was Du brauchst, welche Prüfung Du noch so vor hast :)

Viel Erfolg

Gruß


ralphdieter  06.07.2021, 17:17

Klappt bei mir nicht:

  • /home/rasender-reporter/repo/grammar/prepositions.git

Ich würde den Pfad mit input.split("/repo/") zerlegen und einen Fehler werfen, wenn dabei nicht exakt zwei Teile entstehen.

0
AldoradoXYZ  06.07.2021, 17:31
@ralphdieter

Auf jeden Fall ist das nicht sicher.

Aber wenn man in einem Umfeld ist in dem man sich solche Dinge sowieso nicht leisten kann, dann würde ich gleich Path benutzen, statt mit Strings rumzumachen.

Es kommt wirklich auf den konkreten Fall an was man machen möchte.

Gruß

1

Ich vermute mal du willst das in einem Pfad umwandeln und dann damit arbeiten.

Path path = Path.of(path_str);

Dann kannst du den relativen Pfad mittels der passenden Methode erzeugen:

Path relative_path = path_parent.relativize​(path);

path_parent ist dabei der Pfad nach "/var/opt/prog/prog-data/repo".

Vorteil von dieser Variante sind eingebaute Syntaxchecks, leichte Möglichkeit, komplexere Pfade aufzulösen und bereits eingebaute hilfreiche Methoden.

Siehe auch:

https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Path.html

Du kannst entweder einen substring ab einem bestimmten index "ausschneiden" oder den ersten Teil mit der "replace" methode durch einen leeren String ersetzen.

  • substring
public static String repoPath(String in) {
    return in.substring(24); // gibt den Teil des Strings 
                             // ab index 24 (das 'r' in
                             // "repo") zurück
}
  • replace
public static String repoPath(String in) {
    return in.replace("/var/opt/prog/prog-data/", "");
}

Die erste Methode ist weit effizienter, die zweite eventuell Nutzerfreundlicher, du musst keinen Index abzählen (was ich ja eh schon für dich gemacht habe). ich würde die erste Methode verwenden.

Woher ich das weiß:Hobby

FrankMan12 
Fragesteller
 06.07.2021, 14:36

Das wird leider nicht klappen da alles was vor repo ist kann auch anderes aussehen. nur repo bleibt erhalten

1
malte314  06.07.2021, 14:56
@FrankMan12

Oh verstehe. Entschuldigung, ich habe überlesen, dass auch das vor repo anders sein kann. In diesem Falle verweise ich auf die Antwort des/der Destranix bzw. auf in.split("repo", 2), falls du sicher sein kannst, dass "repo" nicht vorher ungewollt in dem Pfad vorkommt.

0

Abschneiden machst du mit Substring.

Woher ich das weiß:Berufserfahrung – Freiberuflicher Java Entwickler mit 10 Jahren Erfahrung

String.split war das glaube ich. Oder du verwendest eine Regex.


Xearox  06.07.2021, 14:25

mit String.split splittest du den String in viele einzelne Teile.

string[] arr = "h.a.l.l.o".split('.');

arr = {"h","a","l","l","o"}

Abschneiden machst du mit substring

string tmp = "hallo".substring(0,2);

tmp = "ha" könnte auch "hal" sein, bin ich mir gerade nicht sicher.

0