如何在java中进行字符串的模式匹配?
在我的应用程序中,我从服务器得到一些响应。我得到的时间格式是“PT10H2M1S”、“PT1H2S”、“PT0S”等。如果字符串中存在如何在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');
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];
}