2014-01-06 149 views
0

我有以下日期:獲取某些子

"Friday, January 31", 
"Wednesday, February 12", 
"Monday, February 17", 
"Wednesday, March 5", 

我想建立一個字符串函數,其中我總是給出的數字:

31 
12 
17 
5 

我開始用這個功能:

String strCheck = suspendedDates[i]; 
int pos = strCheck.length(); 
int pos2 = strCheck.indexOf(" "); 

我堅持現在,因爲它是如何知道哪些" "是什麼呢?

有人可以幫助我的功能。

+0

它將採取第一個,如文檔所述。 _「返回指定子字符串第一次出現的該字符串中的索引。「_ –

回答

2

作爲@JigarJoshi答案的替代方案,如果您不介意,可以使用正則表達式,刪除所有非數字字符。

String result = dateString.replaceAll("[^\\d]+",""); 
+0

太多的代碼+正則表達式是如果他只需要得到最後一個數字並且格式相同,他應該使用:太多的代碼,只需使用s.substring(c.lastIndexOf(「」),s.length()) –

+0

@DanielNuriyev我不知道格式是否總是相同,但是f或另一件事你是對的,這就是爲什麼我以「作爲替代」開始我的答案;)我不會複製粘貼其他什麼已經回答 – nachokk

4

使用lastIndexOf()代替indexOf()

final String str = "Friday, January 31"; 
System.out.println(str.substring(str.lastIndexOf(" "))); 
2

獲取從最終的子字符串。而不是試圖找出位置

strCheck.substring(strCheck.length()-2); 

這將採取最後兩個字符。然後,只需做一個trim()的情況下,它是一個單個字符刪除空格: -

strCheck.substring(strCheck.length()-2).trim(); 

替代

提到另一種選擇是做對String一個lastIndexOf()用空格(」「 )作爲參數,它將從String的末尾向後搜索,直到找到空間。但是因爲數字總是可以在2個字符空間中提取,所以我沒有理由每次要在已知位置(length()-2)中提取已知大小String(2)以進行2個字符比較以檢索您的位置已經知道。

+1

如果只需要查詢最後一個數字,就不需要修改字符串。如果格式不變,只需要:代碼太多,只需使用s.substring(c.lastIndexOf(」「),s。 length()) –

+0

我的代碼轉到給定的索引處,並提取所需的'String',你將從'String'的末尾向後搜索,直到找到一個「」,沒有可選的'trim()'my代碼實際上效率更高 –

+0

看看trim內部代碼的數量,在這種情況下包括不必要的代碼,但這種差別很可能不是很重要,我們運行它一百萬次吧 –

1

如果您試圖將字符串分成多個部分進行解析,我建議使用String.split(「」),查看javadocs和因特網上的很多很好的示例! :)

1

您可以使用這樣的事情:

String str = "Friday, January 31"; 
Scanner s = new Scanner(s); 
s.useDelimiter("\\D+"); 
while (s.hasNextInt()){ 
    s.nextInt(); // get int 
} 
+1

太多的代碼。只需使用s.substring(c.lastIndexOf(「」),s.length()) –

+2

,但如果您稍後想提取更多信息或更改格式,則會更有效。 –

2

我不得不將它張貼;因爲這是一個日期我會日期解析去以允許的輸入格式的額外的檢查:

的另一種方法:

SimpleDateFormat format = new SimpleDateFormat("EEEE, MMMM DD"); 
Calendar cal = Calendar.getInstance(); 

cal.setTime(format.parse("Friday, January 31")); 
System.out.println(new SimpleDateFormat("DD").format(cal.getTime())); 

第二SimpleDateFormat("DD")用來代替過時getDate()

+0

+1如果格式總是相同的,這是使用SimpleFormatDate更多的OOP解決方案, – nachokk

+0

但是你可以重構你的代碼一點;-) – nachokk

+0

@nachokk謝謝,是的,我可以,總是有一個範圍我猜:-) – PopoFibo