I'm trying to remove the last word in an Arraylist of Strings.
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("8.4 8.4"); list.add("6.5 8.0"); list.add("5.0 6.3 10.0");
ArrayList<String> restlist = new ArrayList<String>();
ArrayList<String> lastlist = new ArrayList<String>();
for(String str : list) {
String everything = str.trim();
String[] words = everything.split(" ");
String lastWord = words[words.length - 1];
String restWords = everything.replace(lastWord, "");
lastlist.add(lastWord);
restlist.add(restWords);
}
System.out.println(restlist);
System.out.println(lastlist);
}
If i run my code it prints out:
[ , 6.5 , 5.0 6.3 ]
[8.4, 8.0, 10.0]
The problem is that it also removes the first 8.4 and i only want to remove the last.
Because you want to separate the last word of the rest, maybe using "lastIndex()" and "substring()" method is a better way:
for(String str : list) {
String everything = str.trim();
int lastPos = everything.lastIndexOf(' ');
if(lastPos < 0){
continue; //check if there is a space char
}
String lastWord = everything.substring(lastPos + 1);
String restWords = everything.substring(0,lastPos)
lastlist.add(lastWord);
restlist.add(restWords);
}
It will be good point to move to a function the duty of removing last word in a string. Please try this code:
private static ArrayList<String> lastlist = new ArrayList<String>();
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("8.4 8.4"); list.add("6.5 8.0"); list.add("5.0 6.3 10.0");
ArrayList<String> restlist = new ArrayList<String>();
for(String str : list) {
String restWords = cutOffLastWord(str);
if (restWords.trim().length()>0) {
restlist.add(restWords);
}
}
System.out.println(restlist);
System.out.println(lastlist);
}
private static String cutOffLastWord(String inputText) {
String outputText = "";
String[] words = inputText.split("\\s+");
if (words.length > 1) {
for (int i=0; i<words.length-1; i++) {
if (i>0) outputText += " ";
outputText += words[i];
}
}
lastlist.add(words[words.length-1]);
System.out.println(words[words.length-1] + " removed from " + inputText);
return outputText;
}
}
This will be the output:
8.4 removed from 8.4 8.4
8.0 removed from 6.5 8.0
10.0 removed from 5.0 6.3 10.0
[8.4, 6.5, 5.0 6.3]
[8.4, 8.0, 10.0]
Other thing is what happen when there is only one word? As I see in other answers it will fail.
You can try this:
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> list = new ArrayList<String>();
list.add("8.4 8.4"); list.add("6.5 8.0"); list.add("5.0 6.3 10.0");
ArrayList<String> restlist = new ArrayList<String>();
ArrayList<String> lastlist = new ArrayList<String>();
for(String str : list) {
String everything = str.trim();
String[] words = everything.split(" ");
String lastWord = words[words.length - 1];
String restWords = everything.substring(0,everything.length() - lastWord.length());
lastlist.add(lastWord);
restlist.add(restWords);
}
System.out.println(restlist);
System.out.println(lastlist);
}
or you can first create a table; then remove last column.
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("8.4 8.4");
list.add("6.5 8.0");
list.add("5.0 6.3 10.0");
List<List<String>> split = new ArrayList<List<String>>();
for (String str : list) {
String[] strSp = str.split(" ");
List<String> row = new ArrayList<>();
split.add(row);
for (int i = 0; i < strSp.length - 1; i++) {
row.add(strSp[i]);
}
}
System.out.println("without last column=> " + split);
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("8.4 8.4");
list.add("6.5 8.0");
list.add("5.0 6.3 10.0");
List<List<String>> split = new ArrayList<List<String>>();
for (String str : list) {
String[] strSp = str.split(" ");
List<String> row = new ArrayList<>();
split.add(row);
Collections.addAll(row, strSp);
}
System.out.println("all=> " + split);
System.out.println();
System.out.println("without last column=> ");
for (List<String> strings : split) {
for (int i = 0; i < strings.size() - 1; i++) {
System.out.print(strings.get(i) + " ");
}
System.out.println();
}
System.out.println();
System.out.print("last columns=> ");
for (List<String> strings : split) {
System.out.print(strings.get(strings.size() - 1) + " ");
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.