Java: Letztes Element nach Split abrufen

Lesezeit: 7 Minuten

Benutzer-Avatar
n00ki3

Ich verwende die String-Split-Methode und möchte das letzte Element haben. Die Größe des Arrays kann sich ändern.

Beispiel:

String one = "Düsseldorf - Zentrum - Günnewig Uebachs"
String two = "Düsseldorf - Madison"

Ich möchte die obigen Strings aufteilen und das letzte Element erhalten:

lastone = one.split("-")[here the last item] // <- how?
lasttwo = two.split("-")[here the last item] // <- how?

Ich kenne die Größen der Arrays zur Laufzeit nicht 🙁

  • Stattdessen können Sie substring und indexof verwenden.

    – Surendheran

    27. August 2014 um 2:47 Uhr

  • @SurendarKannan Die am häufigsten gewählte Antwort hat ein Beispiel dafür, mit lastIndexOf.

    – Adam Jensen

    27. August 2014 um 3:59 Uhr

Benutzer-Avatar
Denis Baschenow

Du könntest benutzen lastIndexOf() Methode auf String

String last = string.substring(string.lastIndexOf('-') + 1);

  • Ich denke, diese Lösung benötigt weniger Ressourcen.

    – ufk

    26. Mai 2010 um 15:32 Uhr

  • Wird das nicht werfen IndexOutOfBoundsException wenn string beinhaltet nicht '-'?

    – Jared Beck

    2. September 2013 um 23:01 Uhr

  • Nein, @JaredBeck, tut es nicht. Aber es gibt die gesamte Zeichenfolge zurück, die Sie wollen oder nicht wollen. Es ist möglicherweise besser, zuerst zu überprüfen, ob das Zeichen, auf das Sie aufteilen, in der Zeichenfolge vorhanden ist.

    – james.garriss

    6. Dezember 2013 um 18:10 Uhr

  • Aber das wird einen werfen IndexOutOfBoundsException wenn string enthält '-' an letzter Stelle

    – verdammt

    16. April 2014 um 10:02 Uhr

  • @damgad, wird es nicht. lastIndexOf ist die Länge der Zeichenfolge – 1. Sie erhalten also eine leere Zeichenfolge

    – Denis Baschenow

    1. Mai 2015 um 2:41 Uhr

Benutzer-Avatar
Jon Skeet

Speichern Sie das Array in einer lokalen Variablen und verwenden Sie die des Arrays length Feld, um seine Länge zu finden. Subtrahieren Sie eins, um zu berücksichtigen, dass es 0-basiert ist:

String[] bits = one.split("-");
String lastOne = bits[bits.length-1];

Caveat emptor: Wenn die ursprüngliche Zeichenfolge beispielsweise nur aus dem Trennzeichen besteht "-" oder "---", bits.length wird 0 sein und dies wird eine ArrayIndexOutOfBoundsException auslösen. Beispiel: https://onlinegdb.com/r1M-TJkZ8

  • Beachten Sie nur, dass in dem Fall, in dem die Eingabezeichenfolge leer ist, die zweite Anweisung eine „Index außerhalb der Grenzen“-Ausnahme auslöst.

    – Stefan C

    26. Juli 2009 um 1:23 Uhr

  • Nein, wird es nicht, wenn Sie eine leere Zeichenfolge aufteilen, wird ein Array zurückgegeben, das ein Eins-Element enthält, das die leere Zeichenfolge selbst ist.

    – Pantro

    27. Juli 2017 um 18:45 Uhr

  • Wenn die ursprüngliche Zeichenfolge beispielsweise nur aus dem Trennzeichen besteht "-" oder "---", bits.length wird 0 sein und dies wird eine ArrayIndexOutOfBoundsException auslösen. Beispiel: onlinegdb.com/r1M-TJkZ8

    – Dario

    17. Januar 2020 um 8:25 Uhr

  • Siehe Antwort von Denis Bazhenov für eine Lösung, die ArrayIndexOutOfBoundsException nicht auslöst: stackoverflow.com/a/1181976/4249576

    – Dario

    19. Januar 2020 um 14:16 Uhr

Benutzer-Avatar
Ranosam

Du kannst den … benutzen StringUtils Klasse in Apache Commons:

StringUtils.substringAfterLast(one, "-");

Benutzer-Avatar
dfa

Verwenden Sie eine einfache, aber generische Hilfsmethode wie diese:

public static <T> T last(T[] array) {
    return array[array.length - 1];
}

du kannst umschreiben:

lastone = one.split("-")[..];

wie:

lastone = last(one.split("-"));

Benutzer-Avatar
Zar E. Ahmer

String str = "www.anywebsite.com/folder/subfolder/directory";
int index = str.lastIndexOf("https://stackoverflow.com/");
String lastString = str.substring(index +1);

Jetzt lastString hat den Wert "directory"

Benutzer-Avatar
Yash

Alle möglichen Wege zusammengerafft!!


Durch die Nutzung lastIndexOf() & substring() Methoden von Java.lang.String

// int firstIndex = str.indexOf( separator );
int lastIndexOf = str.lastIndexOf( separator );
String begningPortion = str.substring( 0, lastIndexOf );
String endPortion = str.substring( lastIndexOf + 1 );
System.out.println("First Portion : " + begningPortion );
System.out.println("Last  Portion : " + endPortion );

split()Java SE 1.4. Teilt den bereitgestellten Text in ein Array auf.

String[] split = str.split( Pattern.quote( separator ) );
String lastOne = split[split.length-1];
System.out.println("Split Array : "+ lastOne);
  • Wie teilt man String vor dem ersten Komma?

Java 8 sequentiell bestellt Strom aus einem Array.

String firstItem = Stream.of( split )
                         .reduce( (first,last) -> first ).get();
String lastItem = Stream.of( split )
                        .reduce( (first,last) -> last ).get();
System.out.println("First Item : "+ firstItem);
System.out.println("Last  Item : "+ lastItem);

Apache Commons LangKrug « org.apache.commons.lang3.StringUtils

String afterLast = StringUtils.substringAfterLast(str, separator);
System.out.println("StringUtils AfterLast : "+ afterLast);

String beforeLast = StringUtils.substringBeforeLast(str, separator);
System.out.println("StringUtils BeforeLast : "+ beforeLast);

String open = "[", close = "]";
String[] groups = StringUtils.substringsBetween("Yash[777]Sam[7]", open, close);
System.out.println("String that is nested in between two Strings "+ groups[0]);

Guava: Google Core-Bibliotheken für Java. « com.google.common.base.Splitter

Splitter splitter = Splitter.on( separator ).trimResults();
Iterable<String> iterable = splitter.split( str );
String first_Iterable = Iterables.getFirst(iterable, "");
String last_Iterable = Iterables.getLast( iterable );
System.out.println(" Guava FirstElement : "+ first_Iterable);
System.out.println(" Guava LastElement  : "+ last_Iterable);

Skripterstellung für die Java-Plattform « Führen Sie Javascript auf der JVM mit Rhino/Nashorn aus

  • Nashorn « Rhino ist eine vollständig in Java geschriebene Open-Source-Implementierung von JavaScript. Es wird normalerweise in Java-Anwendungen eingebettet, um Endbenutzern Skripts bereitzustellen. Es ist als Standard-Java-Scripting-Engine in J2SE 6 eingebettet.

  • Nashorn ist eine JavaScript-Engine, die von Oracle in der Programmiersprache Java entwickelt wurde. Es basiert auf der Da Vinci Machine und wurde mit Java 8 veröffentlicht.

Java-Scripting Programmierhandbuch

public class SplitOperations {
    public static void main(String[] args) {
        String str = "my.file.png.jpeg", separator = ".";
        javascript_Split(str, separator);
    }
    public static void javascript_Split( String str, String separator ) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        // Script Variables « expose java objects as variable to script.
        engine.put("strJS", str);

        // JavaScript code from file
        File file = new File("E:/StringSplit.js");
        // expose File object as variable to script
        engine.put("file", file);

        try {
            engine.eval("print('Script Variables « expose java objects as variable to script.', strJS)");

            // javax.script.Invocable is an optional interface.
            Invocable inv = (Invocable) engine;

            // JavaScript code in a String
            String functions = "function functionName( functionParam ) { print('Hello, ' + functionParam); }";
            engine.eval(functions);
            // invoke the global function named "functionName"
            inv.invokeFunction("functionName", "function Param value!!" );

            // evaluate a script string. The script accesses "file" variable and calls method on it
            engine.eval("print(file.getAbsolutePath())");
            // evaluate JavaScript code from given file - specified by first argument
            engine.eval( new java.io.FileReader( file ) );

            String[] typedArray = (String[]) inv.invokeFunction("splitasJavaArray", str );
            System.out.println("File : Function returns an array : "+ typedArray[1] );

            ScriptObjectMirror scriptObject = (ScriptObjectMirror) inv.invokeFunction("splitasJavaScriptArray", str, separator );
            System.out.println("File : Function return script obj : "+ convert( scriptObject ) );

            Object eval = engine.eval("(function() {return ['a', 'b'];})()");
            Object result = convert(eval);
            System.out.println("Result: {}"+ result);

            // JavaScript code in a String. This code defines a script object 'obj' with one method called 'hello'.
            String objectFunction = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
            engine.eval(objectFunction);
            // get script object on which we want to call the method
            Object object = engine.get("obj");
            inv.invokeMethod(object, "hello", "Yash !!" );

            Object fileObjectFunction = engine.get("objfile");
            inv.invokeMethod(fileObjectFunction, "hello", "Yashwanth !!" );
        } catch (ScriptException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static Object convert(final Object obj) {
        System.out.println("\tJAVASCRIPT OBJECT: {}"+ obj.getClass());
        if (obj instanceof Bindings) {
            try {
                final Class<?> cls = Class.forName("jdk.nashorn.api.scripting.ScriptObjectMirror");
                System.out.println("\tNashorn detected");
                if (cls.isAssignableFrom(obj.getClass())) {
                    final Method isArray = cls.getMethod("isArray");
                    final Object result = isArray.invoke(obj);
                    if (result != null && result.equals(true)) {
                        final Method values = cls.getMethod("values");
                        final Object vals = values.invoke(obj);
                        System.err.println( vals );
                        if (vals instanceof Collection<?>) {
                            final Collection<?> coll = (Collection<?>) vals;
                            Object[] array = coll.toArray(new Object[0]);
                            return array;
                        }
                    }
                }
            } catch (ClassNotFoundException | NoSuchMethodException | SecurityException
                    | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            }
        }
        if (obj instanceof List<?>) {
            final List<?> list = (List<?>) obj;
            Object[] array = list.toArray(new Object[0]);
            return array;
        }
        return obj;
    }
}

JavaScript-Datei « StringSplit.js

// var str="angular.1.5.6.js", separator = ".";
function splitasJavaArray( str ) {
  var result = str.replace(/\.([^.]+)$/, ':$1').split(':');
  print('Regex Split : ', result);
  var JavaArray = Java.to(result, "java.lang.String[]");
  return JavaArray;
  // return result;
}
function splitasJavaScriptArray( str, separator) {
    var arr = str.split( separator ); // Split the string using dot as separator
    var lastVal = arr.pop(); // remove from the end
    var firstVal = arr.shift(); // remove from the front
    var middleVal = arr.join( separator ); // Re-join the remaining substrings

    var mainArr = new Array();
    mainArr.push( firstVal ); // add to the end
    mainArr.push( middleVal );
    mainArr.push( lastVal );

    return mainArr;
}

var objfile = new Object();
objfile.hello = function(name) { print('File : Hello, ' + name); }
  • JavaScript-Array-Konstruktor oder Array-Literal.

Benutzer-Avatar
Palast

Mit Guave:

final Splitter splitter = Splitter.on("-").trimResults();
assertEquals("Günnewig Uebachs", Iterables.getLast(splitter.split(one)));
assertEquals("Madison", Iterables.getLast(splitter.split(two)));

Splitter, Iterables

1345290cookie-checkJava: Letztes Element nach Split abrufen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy