我假設這是一個容易回答的問題,我將如何拆分一個數字20120101,例如,使用java中的split()方法獲取2012年, 01,01 ...如果它被逗號或句點分開,我會知道該怎麼做,但是如果它沒有被任何東西隔開,你怎麼做?拆分使用split()分離的任何數據都沒有分開 - java
回答
我將如何分割數20120101例如,使用分裂() 方法在Java中獲得2012,01,01 ...
你不會; split
通常用於帶有明確分隔符的文本,這是您沒有的(您可以查看其他答案,但它不是該作業的最佳工具)。您有以下選項:
使用
String.substring
可以在特定位置提取子字符串。例如:String m = "20120101".substring(4, 6);
使用
SimpleDateFormat
解析日期。例如:Date d = new SimpleDateFormat("yyyyMMdd").parse("20120101");
使用數學(雖然考慮到您的輸入應該是一個日期語義不大合適)。例如:
int number = Integer.parseInt("20120101"); int y = number/10000; int m = (number/100) % 100; int d = number % 100;
編輯:
以上答案是嚴重的,善意的。下面的答案純粹是有趣的廢話。
氣墊船Full Of Eels顯示瞭如何使用正則表達式與split()
。
有點偏離主題,這裏有一些其他的完全不恰當的和醜陋的解決方案,沒有真正的理由(我不打算髮佈一個正則表達式,除非我想出了一個特別討厭的一個):
使用StringReader
:
StringReader reader = new StringReader("20120101");
String y, m, d;
char buffer[];
buffer = new char[4];
reader.read(buffer);
y = new String(buffer);
buffer = new char[2];
reader.read(buffer);
m = new String(buffer);
reader.read(buffer);
d = new String(buffer);
或使用改性StringReader
插入空格的極其方便溶液和StreamTokenizer
分裂令牌:
StreamTokenizer st = new StreamTokenizer(new StringReader("20120101") {
private int position = 0;
@Override public int read() throws IOException {
switch (++ position) {
case 5:
case 8:
return ' ';
default:
return super.read();
}
}
@Override public int read (char[] cbuf, int off, int len) throws IOException {
for (int n = off; n < off + len; ++ n)
cbuf[n] = (char)read();
return len;
}
@Override public boolean markSupported() {
return false;
}
@Override public void reset() throws IOException {
position = 0;
super.reset();
}
});
st.resetSyntax();
st.wordChars('0', '9');
st.whitespaceChars(' ', ' ');
st.nextToken();
String y = st.sval;
st.nextToken();
String m = st.sval;
st.nextToken();
String d = st.sval;
我想你也可以編寫一個程序,從標準輸入讀取,在適當的地方插入逗號,然後打印結果。然後,您可以將您的字符串輸入該程序,讀取輸出(使用Process
)和split()
即可。如果Process
太直接了,那麼可以用類加載器動態加載該程序的類,然後使用反射來相應地重定向stdin和stdout後調用main
。
我最終使用了子字符串,謝謝! –
爲什麼會更好?但我同意,似乎破碎了。 –
不,從不使用醜陋的正則表達式時,一個體面的可調試和可擴展的解決方案存在。 1+ –
試試這個:
String date = "20120101";
String year = date.substring(0, 4);
String month = date.substring(4, 6);
String day = date.substring(6, 8);
或者使用SimpleDateFormat
和Calendar
:
String date = "20120101";
DateFormat df = new SimpleDateFormat("yyyyMMdd");
Calendar cal = Calendar.getInstance();
try {
cal.setTime(df.parse(date));
} catch (ParseException e) {
e.printStackTrace();
// Could not parse date.
// Break execution.
}
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
這工作得很好,謝謝!而不是把它放到一個字符串中,我立即將它解析爲一個整數。 –
你把它解析爲一個整數?你測試過其中一個細分市場是08還是09?那裏可能有問題。 –
我不知道它會如何產生問題??只要它的格式爲20120101我不知道它會如何導致問題 –
正如我在評論中所說的,嘗試使用split(...)將會像嘗試將香蕉當作錘子一樣使用。當然,在某種程度上,你最終可能會從事某種工作,但這會很痛苦,結果也不是很可靠。使用正確的工具來完成這項工作。
因此,這裏是一個醜陋的一個例子是h3ll split(...)
,貼只是咧嘴一笑:
import java.util.Arrays;
public class DumbSplit {
public static void main(String[] args) {
String dateStr = "20120101";
String bananaAsHammer = "(?<=.{4}).*(?=.{4})|(?<=.{6}).*(?=.{2})";
String[] tokens = dateStr.split(bananaAsHammer);
System.out.println(Arrays.toString(tokens));
}
}
我也在研究這個。然後我停了下來,因爲肯定會有比我更有奉獻精神的人解決這個問題。瞧瞧... –
@JasonC:我確信有更好的和更醜陋的解決方案。所以是的,繼續分享,如果你有。 –
哦jeez,我從來沒有得到這個,謝謝你給我這個! haha –
- 1. 拆分沒有分隔符的數據?
- 2. 拆分表達式,但離開分離
- 3. 拆分ExcelSheet分離
- 4. 如何在android .split()中拆分數字;
- 5. 使用split或implode拆分PHP變量
- 6. git:開關分支沒有分離頭
- 7. 拆分,使用一個分離器
- 8. 如何拆分R中沒有分隔符的列數據
- 9. 如何拆分沒有定義分隔符的數據幀列
- 10. 拆分字符串沒有拆分器
- 11. 分割使用.split
- 12. 使用shell拆分數據
- 13. 拆分OpenCV墊沒有複製數據
- 14. 拆分數據
- 15. 拆分數據
- 16. 拆分數據
- 17. 拆分數據
- 18. 拆分和分析數據
- 19. 使用數組拆分法分離的名字/號碼
- 20. 沒有分隔符的拆分命令
- 21. 拆分屏幕分爲兩部分使用離子框架?
- 22. 拆分和非拆分數據框分爲四部分
- 23. 在不使用split()函數的情況下拆分BGR矩陣
- 24. 拆分數據分成幾個部分
- 25. Java - 幫助使用「拆分()」
- 26. 拆分它使用Java
- 27. 使用JDOM Java拆分XML
- 28. bash split命令沒有在python中拆分文件
- 29. 我如何拆分和分配數據?
- 30. 根據大小拆分XML使用Java
爲什麼不使用串? –
根據你的例子,你可以使用'SimpleDateFormat'生成一個'Date'對象並以這種方式提取這些值。 – MadProgrammer
嘗試爲此使用'split(...)'就像嘗試使用香蕉作爲錘子一樣。當然,在某種程度上,你最終可能會從事某種工作,但這會很痛苦,結果也不是很可靠。使用正確的工具來完成這項工作。 –