Saya menggunakan metode pemisahan String dan saya ingin memiliki elemen terakhir. Ukuran Array bisa berubah.
Contoh:
String one = "Düsseldorf - Zentrum - Günnewig Uebachs"
String two = "Düsseldorf - Madison"
Saya ingin membagi String di atas dan mendapatkan item terakhir:
lastone = one.split("-")[here the last item] // <- how?
lasttwo = two.split("-")[here the last item] // <- how?
Saya tidak tahu ukuran array saat runtime :(
Jawaban:
Simpan larik dalam variabel lokal dan gunakan bidang larik
length
untuk mencari panjangnya. Kurangi satu untuk memperhitungkannya menjadi berbasis 0:String[] bits = one.split("-"); String lastOne = bits[bits.length-1];
Caveat emptor: jika string asli hanya terdiri dari pemisah, misalnya
"-"
atau"---"
,bits.length
akan menjadi 0 dan ini akan memunculkan ArrayIndexOutOfBoundsException. Contoh: https://onlinegdb.com/r1M-TJkZ8sumber
"-"
atau"---"
,bits.length
akan menjadi 0 dan ini akan memunculkan ArrayIndexOutOfBoundsException. Contoh: onlinegdb.com/r1M-TJkZ8Atau Anda bisa menggunakan
lastIndexOf()
metode pada StringString last = string.substring(string.lastIndexOf('-') + 1);
sumber
IndexOutOfBoundsException
jikastring
tidak mengandung'-'
?IndexOutOfBoundsException
jikastring
berisi'-'
pada posisi terakhirAnda dapat menggunakan kelas StringUtils di Apache Commons:
StringUtils.substringAfterLast(one, "-");
sumber
menggunakan metode pembantu yang sederhana, namun umum, seperti ini:
public static <T> T last(T[] array) { return array[array.length - 1]; }
Anda bisa menulis ulang:
lastone = one.split("-")[..];
sebagai:
lastone = last(one.split("-"));
sumber
first()
dannth(T[array], int n)
terbuat dari ini.String str = "www.anywebsite.com/folder/subfolder/directory"; int index = str.lastIndexOf('/'); String lastString = str.substring(index +1);
Sekarang
lastString
ada nilainya"directory"
sumber
Kumpulkan semua cara yang mungkin bersama !!
Dengan menggunakan
lastIndexOf()
&substring()
metodeJava.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 . Membagi teks yang disediakan menjadi larik.String[] split = str.split( Pattern.quote( separator ) ); String lastOne = split[split.length-1]; System.out.println("Split Array : "+ lastOne);
Java 8 urutan aliran berurutan dari 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);
Tabung Apache Commons Lang «
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
: Perpustakaan Inti Google untuk Java. «Com.google.common.base.SplitterSplitter 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);
Pembuatan Skrip untuk Platform Java «Jalankan Javascript di JVM dengan Rhino / Nashorn
Rhino «Rhino adalah implementasi open-source dari JavaScript yang seluruhnya ditulis di Jawa. Ini biasanya disematkan ke dalam aplikasi Java untuk menyediakan skrip kepada pengguna akhir. Itu tertanam di J2SE 6 sebagai mesin skrip Java default.
Nashorn adalah mesin JavaScript yang dikembangkan dalam bahasa pemrograman Java oleh Oracle. Ini didasarkan pada Mesin Da Vinci dan telah dirilis dengan Java 8.
Panduan Pemrogram Java Scripting
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; } }
File JavaScript «
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); }
sumber
Basic
(ada spasi tambahan), Anda akan mendapatkanBasic
elemen terakhir.Dengan Jambu Biji :
final Splitter splitter = Splitter.on("-").trimResults(); assertEquals("Günnewig Uebachs", Iterables.getLast(splitter.split(one))); assertEquals("Madison", Iterables.getLast(splitter.split(two)));
Splitter
,Iterables
sumber
Karena dia meminta untuk melakukan semuanya di baris yang sama menggunakan split jadi saya menyarankan ini:
lastone = one.split("-")[(one.split("-")).length -1]
Saya selalu menghindari mendefinisikan variabel baru sejauh yang saya bisa, dan menurut saya ini adalah praktik yang sangat baik
sumber
IndexOutOfBoundsException
jika string tidak berisi-
Maksud Anda, Anda tidak tahu ukuran array pada waktu kompilasi? Pada saat run-time mereka dapat ditemukan dengan nilai
lastone.length
danlastwo.length
.sumber
Di java 8
String lastItem = Stream.of(str.split("-")).reduce((first,last)->last).get();
sumber
Anda juga bisa menggunakan
java.util.ArrayDeque
String last = new ArrayDeque<>(Arrays.asList("1-2".split("-"))).getLast();
sumber
Saya kira Anda ingin melakukan ini di baris saya. Itu mungkin (sedikit juggling meskipun = ^)
new StringBuilder(new StringBuilder("Düsseldorf - Zentrum - Günnewig Uebachs").reverse().toString().split(" - ")[0]).reverse()
tadaa, satu baris -> hasil yang Anda inginkan (jika Anda membagi pada "-" (spasi dikurangi spasi) alih-alih hanya "-" (minus) Anda akan kehilangan ruang yang mengganggu sebelum partisi juga = ^) jadi "Günnewig Uebachs" bukannya "Günnewig Uebachs" (dengan spasi sebagai karakter pertama)
Bagus ekstra -> tidak perlu file JAR tambahan di folder lib sehingga Anda dapat menjaga aplikasi Anda tetap ringan.
sumber