亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

除了拆分之外,還有其他方法可以從字符串中獲取列表嗎?

除了拆分之外,還有其他方法可以從字符串中獲取列表嗎?

慕妹3146593 2022-06-30 10:21:56
有一個字符串是一個分隔字符串:item_1|item_2|item_3,在這個例子中分隔符號是|。我的老板不喜歡split獲取字符串不同部分的方法:他認為這樣做有風險,但他不太確定風險是什么。那么還有其他方法可以List從單獨的字符串中獲取 a 嗎?
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

import java.util.ArrayList;

import java.util.List;


public class SplitUsingAnotherMethodBecauseBossLikesWastingEveryonesTime {


    public static void main(String[] args) {

        System.out.println(split("Why would anyone want to write their own String split function in Java?", ' '));

        System.out.println(split("The|Split|Method|Is|Way|More|Flexible||", '|'));

    }


    private static List<String> split(String input, char delimiter) {

        List<String> result = new ArrayList<>();

        int idx = 0;

        int next;


        do {

            next = input.indexOf(delimiter, idx);


            if (next > -1) {

                result.add(input.substring(idx, next));

                idx = next + 1;

            }

        } while(next > -1);


        result.add(input.substring(idx));


        return result;

    }

}

輸出...


[Why, would, anyone, want, to, write, their, own, String, split, function, in, Java?]

[The, Split, Method, Is, Way, More, Flexible, , ]


查看完整回答
反對 回復 2022-06-30
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

您可以只遍歷char字符串中的所有 s,然后用于substring()選擇不同的子字符串:


public static List<String> split(String input, char delimiter) {

    List<String> output = new LinkedList<>();

    int lastIndex = 0;

    boolean doubleQuote = false;

    boolean singleQuoteFound = false;

    for (int i = 0, current, last = 0, length = input.length(); i < length; i++) {

        current = input.charAt(i);

        if (last != '\\') {

            if (current == '"') {

                doubleQuote = !doubleQuote;

            } else if (current == '\'') {

                singleQuoteFound = !singleQuoteFound;

            } else if (current == delimiter && !doubleQuote && !singleQuoteFound) {

                output.add(input.substring(lastIndex, i));

                lastIndex = i + 1;

            }

        }

        last = current;

    }

    output.add(input.substring(lastIndex));

    return output;

}

這是一種非常粗略的方法,但從我的測試來看,它應該處理轉義分隔符、單引號'和/或雙"引號中的分隔符。


可以這樣調用:


List<String> splitted = split("Hello|World|"No|split|here"|\|Was escaped|'Some|test'", '|');

印刷:


[Hello, World, "No|split|here", \|Was escaped, 'Some|test']


查看完整回答
反對 回復 2022-06-30
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

當我們使用拆分字符串時,它會在內部創建 Patterns 對象,該對象會產生開銷,但這僅適用于 Java 7 之前的版本,在 Java 7/8 中,它使用自 java 7 以來的索引,它不會有任何正則表達式引擎的開銷。但是,如果您確實傳遞了一個更復雜的表達式,它會恢復為編譯一個新模式,這里的行為應該與 Java 6 上的行為相同,您可以使用預編譯模式并拆分字符串。


public class MyClass {

static Pattern pattern = Pattern.compile("\\|");

public static void main(String[] args) {

    String str = "item_1|item_2|item_3";

    Stream<String> streamsName = pattern.splitAsStream(str);

    streamsName.forEach(System.out::println);

}

}


查看完整回答
反對 回復 2022-06-30
  • 3 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號