2012-01-18 58 views
2

我有一個來自服務器的字符串。我正在識別一個特定的子字符串,然後打破該子字符串中的主字符串。NSString組件分離的字符串

NSString *string = /* getting from server */; 
NSString *strAddress = /* Substring of string */; 
NSArray *arr = [string componentsSeparatedByString:strAddress]; 
NSString *strBeforeAddress = [arr objectAtIndex:0]; 

strAddress有一些東西時,但在某些情況下,它完全給出了一個奇怪的結果。例如,當

string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657"; 
strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 

我得到了arr只有一個對象,完整的字符串,我認爲這是錯誤的。它應該給出結果爲2個對象:cxzcvxcvblank object。但是,當

string = @"14, Beaven Dam Road\nVail, CO81657"; 
strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 

數組arr在這種情況下有1個對象,完整的字符串。有人能解釋一下這裏發生了什麼嗎?

+0

你可以給你正在搜索的樣本字符串和strAddress? – Satyam 2012-01-18 06:51:50

+0

將來,請使用back tick格式化'code',並且僅將** bold **用於強調。這會讓你的問題更具可讀性。 – PengOne 2012-01-18 07:02:10

回答

-2

如果

string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657"; 
strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 

然後strBeforeAddress會 - cxzcvxcv\n

如果

string = @"14, Beaven Dam Road\nVail, CO81657"; 
    strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 

然後strBeforeAddressnil

+0

你能告訴我你想用字符串來實現什麼,確切地說你想從響應中得到什麼字符串。 – rishi 2012-01-18 06:57:44

+0

我也得到相同的問題,當試圖從拉特隆獲得城市名稱..一些座標在陣列的第三位和一些座標在第二和在某些第五位...... – vishy 2012-01-18 07:05:58

+0

零是不是與@「」相同;第二種情況下的產量是後者,而不是前者。 – PengOne 2012-01-18 13:43:22

12

NSString Class Reference討論的方法componentsSeparatedByString:

陣列中的子串出現在他們在 接收機那樣的順序。相鄰的分隔符字符串在結果中產生空的 字符串。同樣,如果字符串以 開頭或結尾,則分隔符分別爲空,即第一個或最後一個子字符串。 例如,該代碼段:

NSString *list = @"Norman, Stanley, Fletcher";

NSArray *listItems = [list componentsSeparatedByString:@", "];

產生一個陣列{ @"Norman", @"Stanley", @"Fletcher" }

如果list用逗號和空間 - 例如開始,", Norman, Stanley, Fletcher" -the陣列具有這些內容:{ @"", @"Norman", @"Stanley", @"Fletcher" }

如果列表沒有分離器,例如,"Norman" -the數組包含 字符串本身,在此案例{ @"Norman" }

你的兩個測試用例的輸出是:

NSString *string = @"cxzcvxcv\n14, Beaven Dam Road\nVail, CO81657"; 
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 
NSLog(@"%@",[string componentsSeparatedByString:strAddress]); 

輸出

(
    "cxzcvxcv\n", 
    "" 
) 

預期。而對於第二種情況

NSString *string = @"14, Beaven Dam Road\nVail, CO81657"; 
NSString *strAddress = @"14, Beaven Dam Road\nVail, CO81657"; 
NSLog(@"%@",[string componentsSeparatedByString:strAddress]); 

輸出

(
    "", 
    "" 
) 

再次,符合市場預期。我看到這裏沒有問題。

+0

根據文檔,第二個輸出應該是@「14,Beaven Dam Road \ nVail,CO81657」對不對?爲什麼顯示2個空格? – MadhavanRP 2012-01-18 09:45:35

+0

@madhavanrp編號分隔符不是輸出的一部分。輸出始終只有分隔符兩側的字符串。 – PengOne 2012-01-18 13:41:55