Discussion:
[問題] 請問string.split的用法...
(时间太久无法回复)
維尼
2007-04-16 02:48:29 UTC
Permalink
String [] sub=a[1].split("[ \t]",0);

我的a[1]="Dfds dskfjsdkjkddk ddsjk"

我本來以為他會幫我切成

sub[0]="Dfds" sub[1]="dskfjsdkjkddk" sub[2]="ddsjk"

可是他卻幫我切了五段***@.@....

而且是

sub[0]="Dfds" sub[1]="" sub[2]="dskfjsdkjkddk" sun[3]="" sub[4]=""

請問這是出了什麼問題呢***@.@.....

還是我一開始對split的認知就錯了...囧....

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.240.162
愚人
2007-04-16 02:55:21 UTC
Permalink
※ 引述《et220870 (維尼)》之銘言:
: String [] sub=a[1].split("[ \t]",0);
: 我的a[1]="Dfds dskfjsdkjkddk ddsjk"
: 我本來以為他會幫我切成
: sub[0]="Dfds" sub[1]="dskfjsdkjkddk" sub[2]="ddsjk"
: 可是他卻幫我切了五段***@.@....
: 而且是
: sub[0]="Dfds" sub[1]="" sub[2]="dskfjsdkjkddk" sun[3]="" sub[4]=""
: 請問這是出了什麼問題呢***@.@.....
: 還是我一開始對split的認知就錯了...囧....

是您對 regular expression 認知錯了 ^^

public class Test {
public static void main(String[] args) {

String a = "Dfds dskfjsdkjkddk ddsjk";
String[] sub = a.split("[ \t]", 0);

for (int i = 0; i < sub.length; i++) {
System.out.println("token:" + sub[i]);
}

System.out.println("-------------------------");
sub = a.split("[ \t]+", 0);


for (int i = 0; i < sub.length; i++) {
System.out.println("token:" + sub[i]);
}
}
}

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.21.79.162
j***@kkcity.com.tw
2007-04-17 08:59:59 UTC
Permalink
Post by 愚人
public class Test {
public static void main(String[] args) {
String a = "Dfds dskfjsdkjkddk ddsjk";
String[] sub = a.split("[ \t]", 0);
for (int i = 0; i < sub.length; i++) {
System.out.println("token:" + sub[i]);
}
System.out.println("-------------------------");
sub = a.split("[ \t]+", 0);
for (int i = 0; i < sub.length; i++) {
System.out.println("token:" + sub[i]);
}
}
}
我run了程式 結果的確不一樣

也看了正則表示式

但還是有點有看沒董耶..
可不可以再解釋一下...[\t]和[\t]+有什麼不同..謝謝
--
┌─────◆KKCITY◆─────┐ ◢ ◤ 聽 KKBOX,動態歌詞緊緊跟著你
│ bbs.kkcity.com.tw │ \^_^ /  ★ http://www.kkbox.com.tw ★
└──《From:59.104.1.232 》──┘   ◤ 唱片公司授權,音樂盡情下載
--
ha(ruhi|yate)ism
2007-04-17 11:18:41 UTC
Permalink
※ 引述《***@kkcity.com.tw ( )》之銘言:
: 我run了程式 結果的確不一樣
: 也看了正則表示式
: 但還是有點有看沒董耶..
: 可不可以再解釋一下...[\t]和[\t]+有什麼不同..謝謝
+ 相同於{1,} 表示前面那樣東西可以出現一次以上

其他類似的字還有

* 相同於{0,}
? 相同於{0,1}

回到你的問題

會不一樣的原因是因為

你只用[ \t]去match的話 「每個」空白或Tab都會當成一個分隔

所以在連續的分隔之間切出的就是空字串

如果用[ \t]+去match的話 連續的空白或Tab由於這個式子把它一次抓住了

於是全部一整串空白或Tab就會當成一個分隔

所以就不會有連續的分隔 自然空字串就不見了

--
'Oh, Harry, dont't you see?' Hermione breathed. 'If she could have done
one thing to make absolutely sure that every single person in this school
will read your interview, it was banning it!'
---'Harry Potter and the order of the phoenix', P513

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.70.172.164
j***@kkcity.com.tw
2007-04-17 14:54:37 UTC
Permalink
Post by ha(ruhi|yate)ism
: 可不可以再解釋一下...[\t]和[\t]+有什麼不同..謝謝
+ 相同於{1,} 表示前面那樣東西可以出現一次以上
其他類似的字還有
* 相同於{0,}
? 相同於{0,1}
回到你的問題
會不一樣的原因是因為
你只用[ \t]去match的話 「每個」空白或Tab都會當成一個分隔
所以在連續的分隔之間切出的就是空字串
如果用[ \t]+去match的話 連續的空白或Tab由於這個式子把它一次抓住了
於是全部一整串空白或Tab就會當成一個分隔
所以就不會有連續的分隔 自然空字串就不見了
我大概有點董,,可是還是有點疑問??

您的意思是不是說,因為"Dfds dskfjsdkjkddk ddsjk"這個字串

Dfds 和 dskfjsdkjkddk之間的空格是一個分隔

split([\t])就會把這個空格切出來當成空字串

那split([\t]+) 因為 會變成分隔字串的標準為1個或1個以上的空格

所以在這個字串上,以兩個空格當作分隔標準,可是這樣切出來,

不是結果應該是..

Dfs
dskfjsdkjkddk
ddsjk
再加上1個空字串才對??

可是執行的結果卻是
Dfs
dskfjsdkjkddk
ddsjk
沒有最後那個空字串..

有點稿混了.可以再說明一下嗎..謝謝
--
┌─────◆KKCITY◆─────┐ ◢ ◤ 動態歌詞 讓你成為K歌之王!
│ bbs.kkcity.com.tw │ \^_^ /  ★ http://www.kkbox.com.tw ★
└──《From:59.104.1.232 》──┘   ◤ 唱片公司授權,音樂盡情下載
--
ha(ruhi|yate)ism
2007-04-17 18:30:54 UTC
Permalink
�� �ޭz�***@kkcity.com.tw ( )�n���ʨ��G
: �ڤj�����I��,,�i�O�٬O���I�ð�??
: �z���N���O���O��,�]��"Dfds dskfjsdkjkddk ddsjk"�o�Ӧr��
: Dfds �M dskfjsdkjkddk�������Ů��O�@�Ӥ�j
: split([\t])�N�|���o�ӪŮ���X�ӷ��Ŧr��
: ��split([\t]+) �]�� �|�ܦ���j�r�ꪺ�зǬ�1�ө�1�ӥH�W���Ů�
: �ҥH�b�o�Ӧr���W,�H���ӪŮ����@��j�з�,�i�O�o�ˤ�X��,
: ���O���G��ӬO..
: Dfs
: dskfjsdkjkddk
: ddsjk
: �A�[�W1�ӪŦr���~��??
: �i�O���檺���G�o�O
: Dfs
: dskfjsdkjkddk
: ddsjk
: �S���̫ᨺ�ӪŦr��..
: ���I�Z�V�F.�i�H�A�����@�U��..����
��[ \t]�Ӥ���ɭ� ���O����o��

"Dfds  dskfjsdkjkddk  ddsjk"

�C���C���O�@�Ӥ�j (������U�@�M)

�]���o�쪺�Ŧr���O���񤧶����M���Ť��������ӪŦr��

�令[ \t]+���� ���|����o��

"Dfds dskfjsdkjkddk ddsjk"

���O��X�Ӫ��r���N�S���Ŧr���F

--
 �� ��_�c�d�e�c_��. ���@�@�@�@�@ �@�@�@�@�f�f�@�f�f�@�d�����@�@ �i�e�e�e�e�e 
�l./��_�c�d�e�c_�� \'�o �@�@�֢Ϣ����֢� �i�i�i�i�i�@�ա��} �@ �e�e�e�e�e�e�e 
�k�� �������i�����i�G   �@�@�ע��ۡ@ �@�@By-gamejye�@�F|\ �@�@�m�m�m�m�m�e�m�m
�j�a(�j�����������o)�Z �j�@�@ �@�@�@ �@�@�@�@�i�@�@�@ ���G �@�@�e�e�e �e�e�e�e
�i/|�o �� �B ���n |\ �k�@�@�@�@�@ �@ �@�����ΥD�q�@�@�@ �@�@�i�e�e�e�i�e�e 
����|�� ���� ��/'����S.O.S �@���y�j���R���q�W���r�F�h�U�D�c�������U�o�@�@�@ 

--
�� �o�H��: ���������~�{(ptt.cc)
�� From: 192.192.197.117
j***@kkcity.com.tw
2007-04-18 08:43:33 UTC
Permalink
每個顏色是一個分隔 (等於切下一刀)
因此得到的空字串是紅綠之間的和黃藍之間的兩個空字串
改成[ \t]+之後 它會切成這樣
"Dfds dskfjsdkjkddk ddsjk"
於是切出來的字串就沒有空字串了
謝謝..講解的好詳細..感激您
--
┌─────◆KKCITY◆─────┐ ● KKCITY 市民小常識  ●
│ bbs.kkcity.com.tw │ Q:文章標題前有#符號是代表什麼意思?
└──《From:59.104.1.232 》──┘ A:被作者加密了,需輸入密碼才能閱讀
--

继续阅读narkive:
Loading...