簡體   English   中英

如何從Java中的時間語句中提取分鍾數? 例如xx小時xx分鍾

[英]How to extract number of minutes from time sentence in java? e.g xx hrs xx mins

我知道標題令人困惑,但我想不出更好的標題。

說我有一個字符串,看起來可能像([number] hr(s)) [number] min(s)

例如, 1 min15 mins3 hrs 50 mins1 hr 15 mins4 hrs 1 min等等。

如何有效地從此類字符串中提取分鍾數? 我也希望它也考慮到小時數,因此3 hrs 50 mins將得出230 我唯一能想到的就是做很多if子句並使用正則表達式,但我想知道是否有更有效的方法。

為您提供更大靈活性的另一種方法:

public long getMinutes(String input) {
    input = input.toLowerCase()
                 .replaceAll("mins?", "M") 
                 .replaceAll("hrs?", "H")
                 .replaceAll("\\s+", "");
    Duration d = Duration.parse("PT" + input);
    return d.toMinutes();
}

ideone的工作樣本

您的樣本數據的輸出:

1 min: 1
15 mins: 15
3 hrs 50 mins: 230
1 hr 15 mins: 75
4 hrs 1 min: 241

基本思想是將您的輸入轉換為Java的Duration#parse方法支持的字符串( PT<hours>H<minutes>M ),然后解決這個問題。 您最終得到一個Duration對象,該對象隨后提供了各種使用它的方法。

請注意,這將打印230 3 hrs 50 mins 如果只需要50則簡單的正則表達式將是更簡單的方法。

(在生產代碼中,我將各種replaceAll調用合並為一個,並使用不區分大小寫的模式匹配替換toLowerCase ,以提高效率。在此處明確保留此代碼是為了更好地理解。)

這是RegEx解決方案:

((\d+)\s*(hours|hrs|hr|h)\s*)?(\d\d?)\s*(minutes|mins|min|m)

分鍾數:

minutes = $1 * 60 + $4

規則:

  • 即使整整一個小時,您也必須提供分鍾
  • 您可以省略小時,因此1 min等於0 hrs 1 min
  • 如果模式不匹配,則格式無效
  • 為了獲得最佳結果,請使用不區分大小寫的匹配(通常是i選項)

游樂場: https : //regex101.com/r/u8BMtl/1

您可以使用以下代碼,希望對您有所幫助。

String time="3 hrs 50 mins";
    String[] array = time.split(" ");
    int minutes = 0;
    if(array.length>2){  // if it has minute and hour content 
        minutes = Integer.parseInt(array[0])*60 + Integer.parseInt(array[2]);
    } else{  // if time has only minute content
        minutes = Integer.parseInt(array[0]);
    }

如果您的時間是X小時Y分鍾

String time = "3 hrs 10 min";
String[] parts = time.split(" ");
int total = Integer.parseInt(parts[0]) * 60 + Integer.parseInt(parts[2]);

這段等待將為您提供一串小時,然后乘以60分鍾再加上分鍾。 如果您只需要幾分鍾,那就參加吧[2]

你也可以使用正則表達式

暫無
暫無

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

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