作者bera (k.k)
看板java
標題Re: [問題] 分割字串的問題, 求救 >"<
時間Fri May 3 10:30:41 2013
謝謝大家, 我寫出來了
以下是我寫作的方式
思路我是用逗點去想
由逗點數往前找, 如果是奇數個逗點, 就表示在雙引號內
public static void main(String[] args) {
String str =
"小尚,\"Abby, Sun\","+
"girl,0911-XXX0L9,\"si, Tokyo,"+
" Relax~~\",1988/11/20";
System.out.println(str);
int commaNums = 0;//記錄實際comma separate的個數
char content[] = str.toCharArray();
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case ',':
// , 處理,看是否在雙引號區域內
// 往前找, 如果是奇數個逗點, 就表示在雙引號內
int idxCommaNumber = 0; //記錄前面有幾個逼點的指標
for(int j = 0; j < i; j++){
if(content[j]=='"'){
idxCommaNumber++;
}
}
//System.out.println(idxCommaNumber);
if(idxCommaNumber%2 == 0){
commaNums++;
}
break;
case '\"':
// 雙引號區域相關判斷
// 有些判斷要看 content[i + 1]
// do something
break;
default:
// doSomething
break;
}
}
//新增一個儲存逗點位置的array
int[] arrayCommaPosition = new int[commaNums];
//儲存arrayCommaPosition用的指標
int idxComma = 0;
System.out.println(commaNums);
for (int i = 0; i < content.length; i++) {
if(content[i]==','){
int idxCommaNumber = 0; //記錄前面有幾個逼點的指標
for(int j = 0; j < i; j++){
if(content[j]=='"'){
idxCommaNumber++;
}
}
if(idxCommaNumber%2 == 0){
arrayCommaPosition[idxComma] = i;
idxComma++;
}
}
}
System.out.println("目前comma儲存的位置為");
for(int i =0; i< arrayCommaPosition.length;i++){
System.out.println(arrayCommaPosition[i]);
}
//創造一個儲存字串的陣列
String[] cells = new String[commaNums+1];
for(int i = 0 ; i < commaNums + 1 ; i++){
if(i==0){
cells[i] = str.substring(0, arrayCommaPosition[i]);
}else{
if(i==commaNums){
cells[i] = str.substring(arrayCommaPosition[i-1]+1,
content.length );
}else{
cells[i] = str.substring(arrayCommaPosition[i-1]+1,
arrayCommaPosition[i]);
}
}
}
for(int i =0; i < cells.length;i++){
cells[i] = cells[i].replace("\"", "");
}
//印出目前截出來的
for(int i = 0 ; i<cells.length;i++){
System.out.println("cell["+i+"]:"+cells[i]);
}
}
Console:
小尚,"Abby, Sun",girl,0911-XXX0L9,"si, Tokyo, Relax~~",1988/11/20
5
目前comma儲存的位置為
2
14
19
31
52
cell[0]:小尚
cell[1]:Abby, Sun
cell[2]:girl
cell[3]:0911-XXX0L9
cell[4]:si, Tokyo, Relax~~
cell[5]:1988/11/20
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.248.193
→ swpoker:,,\"d,\"跟,,,\"d,\" 的問題? 05/03 10:39
→ bera:我剛剛測試上面兩個沒問題喔~~ 05/03 10:52
※ 編輯: bera 來自: 59.120.248.193 (05/03 10:53)
→ bera:我用 String str =",,\"d,\""; 及 String str =",,,\"d,\""; 05/03 10:54
→ bera:不好意思,我程式技巧沒那麼好,寫的落落長,努力消化你寫的中.. 05/03 10:58
→ bera:總之先謝謝大家啦~~~ 05/03 11:00
→ swpoker:我只是覺得奇怪~怎麼還要往前找~(剛剛我看錯啦 XD) 05/03 11:01
→ swpoker:有個小問題就是 迴圈會跑很多次喔 05/03 11:04
→ bera:對啊~~~迴圈跑很多次, 目前正在想有沒有辦法減少迴圈數中 XD 05/03 11:16
推 PsMonkey:前面兩個有提示你,用資料結構.... 05/03 11:27
→ bera:我...等級應該還沒到= =,而且資料結構這名詞我可能要去google 05/03 11:37
→ bera:先謝謝你~~ 你的文章都很精闢, 尤其是跑腿買便當那個~~~ 05/03 11:39
→ bera:雖然有些程式內容不太懂, 不過文章很傳神~~ 05/03 11:41
→ realmeat:要不要先學一下怎用debugger, 這種簡單問題可以很容易解 05/04 14:21