簡體   English   中英

有效地將字符串解析為 class object 在 java 中有 2 個浮點數

[英]Efficiently parse string to a class object with 2 floats in java

我需要將一個輸入字符串解析成一個新的 class object 由兩個浮點數組成。 我確實有一個解決方案,但它看起來很麻煩。 我想知道是否有更優雅的方式來做到這一點,尤其是。 如果字符串僅拆分為 2 個子字符串並且一個循環似乎有點矯枉過正?

我的 class:

public class Float2 {
    public float width;
    public float height;
}

我將輸入字符串解析為 class object 的方法:

 public Float2 parseStringToFloat2(String inputstring) {

            String[]  stringarray = inputstring.split(",");
            float[] floats = new float[2];
            for (int i = 0; i <2; ++i) {
                float number = Float.parseFloat(stringarray[i]);
                floats[i] = number;
            }
            return new Float2(floats[0], floats[1]);
        }

如果您確定只有 2 個部分,我確實認為循環是一種矯枉過正。 也許試試這個:

public Float2 parseStringToFloat2(String inputstring){
            String[] stringarray = inputstring.split(",");
            try {
                return new Float2(Float.parseFloat(stringarray[0]), Float.parseFloat(stringarray[1]));
            } catch (Exception e) {
                // catch logic
            }
            return null;
        }

正如評論中所說,如果出現轉換錯誤,您還應該使用 try catch 邏輯。

另一種解決方案是使用Scanner 如果您需要特定於語言環境的解析,這是一個更靈活的解決方案(它使用默認語言環境而不設置它,如果 a ,是那里的小數分隔符,這可能會出現問題)。 此外,如果您使用正則表達式分隔符,則可以將模式預編譯得更快。

public static Optional<Float2> parseStringToFloat2(String inputstring) {
    final Scanner in = new Scanner(inputstring).useLocale(Locale.US).useDelimiter(", ");
    // in.useDelimiter(Pattern.compile("\\s*,\\s*"));
    try {
        return Optional.of(new Float2(in.nextFloat(), in.nextFloat()));
    } catch (NoSuchElementException e) {
        return Optional.empty();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM