[英]Converting storage size String to long?
在 Java 中......假設我的輸入是一個字符串,用於存儲大小可能會有所不同。 (例如“1.2mb”、“500kb”、“4.5gb”、“900b”等)我需要將任何輸入轉換為字節並將其存儲為 long。 我認為我需要拆分字符串(例如“1.2”和“mb”、“500”和“kb”等)然后根據第二個字符串我可以確定乘以多少第一個字符串通過將其轉換為字節。
1.) 我不知道如何拆分字符串。 我的想法是反轉字符串然后獲取第二個字符,但是如果輸入以字節為單位,那將不起作用,因為在這種情況下第二個字符將是一個數字。 關於如何正確拆分它的任何想法?
2.) 如果除了拆分字符串之外還有更好的方法,例如某個庫或可以為我進行轉換的東西。 似乎是可能/應該存在的東西。
好吧意識到我完全想多了。 我想出的解決方案是使用 Character.IsLetter() 遍歷字符串以獲取“kb”、“b”、“mb”等。
或者,您也可以通過使用像這樣的正則表達式來實現這一點:
([\d\.]+)\s*(\D*)
這由三部分組成
1. ([\\d\\.]+)
- 查找任何只包含數字和點的字符序列
2. \\s*
- 允許數字和單位之間有空格
3. (\\D*)
- 單位:任何不是數字的東西
你可以在regex101.com上玩這個正則表達式
以下是在 Java 中使用正則表達式的方法:
List<String> inputs = Arrays.asList("100", "500b", "1.2kb", "100 mb", "4.5Gb", "3.45tb");
//Lookup map for the factors
Map<String, Double> factors = new HashMap<>();
factors.put("kb", Math.pow(10,3));
factors.put("mb", Math.pow(10,6));
factors.put("gb", Math.pow(10,9));
factors.put("tb", Math.pow(10,12));
//Create the regex pattern
Pattern pattern = Pattern.compile("(?<size>[\\d\\.]+)\\s*(?<unit>\\D*)");
for(String input : inputs){
//Apply the regex pattern to the input string
Matcher matcher = pattern.matcher(input);
//If it matches
if(matcher.find()){
//get the contents of our named groups
String size = matcher.group("size");
String unit = matcher.group("unit");
//Parse and calculate the result
Double factor = factors.getOrDefault(unit.toLowerCase(), 1d);
double calculatedSize = Double.parseDouble(size) * factor;
//Print the result
System.out.printf("%s\t= %.0f bytes\n", input, calculatedSize);
}
}
輸出:
100 = 100 bytes
500b = 500 bytes
1.2kb = 1200 bytes
100 mb = 100000000 bytes
4.5Gb = 4500000000 bytes
3.45tb = 3450000000000 bytes
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.