Java: Récupère le dernier élément après la scission

J’utilise la méthode de division en chaîne et je veux avoir le dernier élément. La taille du tableau peut changer.

Exemple:

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

Je veux diviser les chaînes ci-dessus et obtenir le dernier élément:

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

Je ne connais pas la taille des baies à l’exécution 🙁

Enregistrez le tableau dans une variable locale et utilisez le champ de length du tableau pour trouver sa longueur. Soustraire un pour tenir compte du fait qu’il soit basé sur 0:

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

Ou vous pouvez utiliser la méthode lastIndexOf() sur Ssortingng

 Ssortingng last = ssortingng.subssortingng(ssortingng.lastIndexOf('-') + 1); 

en utilisant une méthode d’aide simple, mais générique, comme ceci:

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

vous pouvez réécrire:

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

comme:

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

Vous pouvez utiliser la classe SsortingngUtils dans Apache Commons:

 SsortingngUtils.subssortingngAfterLast(one, "-"); 
 Ssortingng str = "www.anywebsite.com/folder/subfolder/directory"; int index = str.lastIndexOf('/'); Ssortingng lastSsortingng = str.subssortingng(index +1); 

Maintenant, lastSsortingng a la valeur "directory"

Avec goyave :

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

Splitter , Iterables

Comme il demandait de tout faire sur la même ligne en utilisant split, je suggère ceci:

 lastone = one.split("-")[(one.split("-")).length -1] 

J’évite toujours de définir de nouvelles variables dans la mesure du possible, et je trouve que c’est une très bonne pratique.

Vous voulez dire que vous ne connaissez pas la taille des tableaux au moment de la compilation? Au moment de l’exécution, ils pouvaient être trouvés par la valeur de lastone.length et lastwo.length .

Réunis tous les moyens possibles ensemble !!


En utilisant les lastIndexOf() & subssortingng() de Java.lang.Ssortingng

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

split() Java SE 1.4 . Divise le texte fourni en un tableau.

 Ssortingng[] split = str.split( Pattern.quote( separator ) ); Ssortingng lastOne = split[split.length-1]; System.out.println("Split Array : "+ lastOne); 
  • Comment séparer Ssortingng avant la première virgule?

Flux ordonné séquentiel Java 8 à partir d’un tableau.

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

Apache Commons Lang jar « org.apache.commons.lang3.SsortingngUtils

 Ssortingng afterLast = SsortingngUtils.subssortingngAfterLast(str, separator); System.out.println("SsortingngUtils AfterLast : "+ afterLast); Ssortingng beforeLast = SsortingngUtils.subssortingngBeforeLast(str, separator); System.out.println("SsortingngUtils BeforeLast : "+ beforeLast); Ssortingng open = "[", close = "]"; Ssortingng[] groups = SsortingngUtils.subssortingngsBetween("Yash[777]Sam[7]", open, close); System.out.println("Ssortingng that is nested in between two Ssortingngs "+ groups[0]); 

Guava : Bibliothèques Google Core pour Java. «Com.google.common.base.Splitter

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

Script pour la plate-forme Java «Exécutez Javascript sur la JVM avec Rhino / Nashorn

  • Rhino «Rhino est une implémentation open source de JavaScript écrite entièrement en Java. Il est généralement intégré aux applications Java pour fournir des scripts aux utilisateurs finaux. Il est intégré à J2SE 6 en tant que moteur de script Java par défaut.

  • Nashorn est un moteur JavaScript développé en langage de programmation Java par Oracle. Il est basé sur Da Vinci Machine et a été publié avec Java 8.

Guide du programmeur de script Java

 public class SplitOperations { public static void main(Ssortingng[] args) { Ssortingng str = "my.file.png.jpeg", separator = "."; javascript_Split(str, separator); } public static void javascript_Split( Ssortingng str, Ssortingng 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:/SsortingngSplit.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 Ssortingng Ssortingng 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 ssortingng. 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 ) ); Ssortingng[] typedArray = (Ssortingng[]) 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 Ssortingng. This code defines a script object 'obj' with one method called 'hello'. Ssortingng 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; } } 

Fichier JavaScript « SsortingngSplit.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.Ssortingng[]"); return JavaArray; // return result; } function splitasJavaScriptArray( str, separator) { var arr = str.split( separator ); // Split the ssortingng 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 subssortingngs 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 Constructeur de tableau ou littéral de tableau .

Je suppose que vous voulez faire ça en ligne. C’est possible (un peu de jongler si = ^)

 new SsortingngBuilder(new SsortingngBuilder("Düsseldorf - Zentrum - Günnewig Uebachs").reverse().toSsortingng().split(" - ")[0]).reverse() 

tadaa, une ligne -> le résultat que vous voulez (si vous divisez sur “-” (espace moins espace) au lieu de “-” (moins) vous perdrez l’espace gênant avant la partition = ^) donc “Günnewig Uebachs” au lieu de “Günnewig Uebachs” (avec un espace comme premier caractère)

Joli extra -> pas besoin de fichiers JAR supplémentaires dans le dossier lib pour que vous puissiez garder votre application légère.

Vous pouvez aussi utiliser java.util.ArrayDeque

 Ssortingng last = new ArrayDeque<>(Arrays.asList("1-2".split("-"))).getLast(); 

En java 8

 Ssortingng lastItem = Stream.of(str.split("-")).reduce((first,last)->last).get();