如何在java中进行字符串的模式匹配?

如何在java中进行字符串的模式匹配?,java,android,string,pattern-matching,Java,Android,String,Pattern Matching,在我的应用程序中,我从服务器得到一些响应。我得到的时间格式是“PT10H2M1S”、“PT1H2S”、“PT0S”等。如果字符串中存在H,我必须将其前面的数字取为hours。如果字符串中存在M,我必须将其前面的数字取为minutes。如果字符串中存在S,我必须将其前面的数字取为秒。我该怎么做?用这个 String s = "PT1H22M18S"; int hIndex = s.indexOf('H'); int mIndex = s.indexOf('M');

在我的应用程序中,我从服务器得到一些响应。我得到的时间格式是“PT10H2M1S”、“PT1H2S”、“PT0S”等。如果字符串中存在
H
,我必须将其前面的数字取为hours。如果字符串中存在
M
,我必须将其前面的数字取为minutes。如果字符串中存在
S
,我必须将其前面的数字取为。我该怎么做?

用这个

    String s = "PT1H22M18S";
    int hIndex = s.indexOf('H');
    int mIndex = s.indexOf('M');
    int sIndex = s.indexOf('S');

    String hours="",mintues="",seconds="";

    if (hIndex > 0) {
        hours = s.substring(2, hIndex);
    }
    if (mIndex > 0) {
        if (hIndex > 0) {
            mintues= s.substring((hIndex + 1), mIndex);
        } else {
            mintues= s.substring(2, mIndex);
        }
    }
    if (sIndex > 0) {
        if (mIndex > 0) {
            seconds= s.substring((mIndex + 1), sIndex);
        } else {
            if (hIndex > 0) {
                seconds= s.substring((hIndex + 1), sIndex);
            } else {
                seconds= s.substring(2, sIndex);
            }
        }
    }

使用
模式
匹配器

String hours;
String mins;
String secs;
Matcher m = Pattern.compile("(\\d+)H|(\\d+)M|(\\d+)S");
while(m.find())
{
 hours = m.group(1);
 mins = m.group(2);
 secs = m.group(3);
}
你需要一个字符串的长度,可能是
字符串的长度,或者
包含(“M”)
包含(“H”)

public String getHour(String time)
{
    String hourString[] = time.split("H");
    String[] hour = hourString[0].split("T");
    return hour[1];
}
得到分钟

public String getMinute(String time)
{
    String minuteString[] = time.split("M");
    String spitedMinute[] = null;
    String finalMinute[] = null;
    //check if H available
    if(minuteString[0].contains("H"))
    {
        spitedMinute = minuteString[0].split("H");
        finalMinute = spitedMinute[1].split("M");
        return finalMinute[0];
    }
    else
    {
        finalMinute = minuteString[0].split("T");
    }

    return finalMinute[1];

}
第二名

public String getSecond(String time)
{
    String spitedMinute[];
    String Second[];

    String spitedHour[];
    String splitedSecondString;
    String timeData[];
    if(time.contains("M"))
    {
        spitedMinute = time.split("M");
        Second = spitedMinute[1].split("S");
    }
    else if(time.contains("H"))
    {
        spitedHour = time.split("H");
        splitedSecondString = spitedHour[1];

        if(splitedSecondString.contains("M"))
        {
            spitedMinute = splitedSecondString.split("M");
            Second = spitedMinute[1].split("S");
        }
        else
        {
            Second = spitedHour[1].split("S");
        }
    }
    else
    {
        timeData = time.split("S");
        Second = timeData[0].split("T");
        return Second[1];
    }

    return Second[0];
}

您可以使用字符串的拆分函数。Joda time在这里可能会有所帮助:回答错误。如果M不在场,H&S在场,那么(mIndex+1)不会将你带到秒值。在H不存在的情况下,分钟数也是如此。请给regexp添加一些解释,好吗?请参考javadoc非常感谢Markus:)
public String getMinute(String time)
{
    String minuteString[] = time.split("M");
    String spitedMinute[] = null;
    String finalMinute[] = null;
    //check if H available
    if(minuteString[0].contains("H"))
    {
        spitedMinute = minuteString[0].split("H");
        finalMinute = spitedMinute[1].split("M");
        return finalMinute[0];
    }
    else
    {
        finalMinute = minuteString[0].split("T");
    }

    return finalMinute[1];

}
public String getSecond(String time)
{
    String spitedMinute[];
    String Second[];

    String spitedHour[];
    String splitedSecondString;
    String timeData[];
    if(time.contains("M"))
    {
        spitedMinute = time.split("M");
        Second = spitedMinute[1].split("S");
    }
    else if(time.contains("H"))
    {
        spitedHour = time.split("H");
        splitedSecondString = spitedHour[1];

        if(splitedSecondString.contains("M"))
        {
            spitedMinute = splitedSecondString.split("M");
            Second = spitedMinute[1].split("S");
        }
        else
        {
            Second = spitedHour[1].split("S");
        }
    }
    else
    {
        timeData = time.split("S");
        Second = timeData[0].split("T");
        return Second[1];
    }

    return Second[0];
}