簡體   English   中英

如何在Java中解析/廣播(不確定術語)未知數據類型

[英]How do you parse/cast (not sure of the term) unknown data types in java

我敢肯定,這已經被問了一百萬遍了,但是這已經過去了。

我試圖用java中的字符串值進行解析或轉換,但我不確定該術語是否適合它的適當數據類型。 我嘗試了很多搜索,但是找不到大概不知道正確術語的答案。 我進行的所有搜索都涉及使用XML或自動裝箱之類的東西,這些東西與我想要的東西都不是一樣。

例如,用戶輸入可以是int,char或double(例如12.0),但是在代碼中將其捕獲為字符串。 可以這么說,我如何將其放入正確的存儲桶中? 我不知道為什么找不到簡單的答案。

編輯:我了解下面的Integer.parseInt()等,但是我想知道如何在運行時通過使用switch或if-else語句檢查適當的類型

如果用戶在鍵盤上輸入了某些內容,則它是一個字符序列,即一個字符串,所以這就是您得到的。 現在,可以將String解釋為數字,URL或任何其他類型。

如果知道需要什么樣的輸入,則可以為該特定類型使用解析函數,例如Integer.parseInt(String)

但是,沒有通用的方法可以回答問題“此字符串代表什么類型”,因為可能性是無限的。 字符串“ 1”可能旨在表示一個整數,或者可以簡單地是一個字符串,或者可以是一個日期,它表示在unix時代之后的一毫秒。

如果您將自己限制為幾種不同的可能性,那么您當然可以編寫一個函數,例如Object parse(String) ,它將字符串轉換為具有不重疊的字符串表示形式的幾種可能的類型之一,例如Integer,Float,Double,Bool ,日期(具有特定格式)或如果沒有匹配項則退回到字符串。 但是,這很少有用,並且需要支持的類型范圍很可能仍取決於您的應用程序,因此您仍然必須推出自己的解決方案。 它可能看起來像這樣:

Object myParse(String str) {
    try {
        return Integer.valueOf(str);
    } catch(NumberFormatException e) {
        // Not an Integer, try the next one
    }

    try {
        return Double.valueOf(str);
    } catch(NumberFormatException e) {
        // Not a Double, try the next one
    }

    try {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.parse(str);
    } catch(ParseException e) {
        // Not a Date in format yyyy-MM-dd
    }

    throw new IllegalArgumentException("No matching format found.");
}

最后,您的String輸入可能采用已知的contianer格式,該格式指示值的類型及其字符串表示形式-例如,對於XML格式: <Integer>1</Integer> 這將允許您從字符串中獲得明確輸入的值,但是它確實要求字符串遵循特定的容器格式。

用戶輸入可以是int,char或double(例如12.0)。

如果輸入確實是未知的,則轉換輸入將遇到問題。 例如,“ 1”(不帶引號)是char還是int?

每種輸入類型都有自己的轉換。 例如:

String s = "test string";

char c = s.charAt(0);
int i = Integer.parseInt(s);
double d = Double.parseDouble(s);

如果字符串分別不是int或double,則將獲得NumberFormatException。

暫無
暫無

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

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