简体   繁体   中英

Removing only the last word in an ArrayList of Strings

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM