2010-08-14 46 views
0

我具有以下問題:字符串格式化算法建議

輸入字符串1: 「A [SPACE] B [SPACE] C [SPACE] [SPACE] d [SPACE] [SPACE] E」
輸入字符串2 :「1-」 OR「1,2」或「3-」

如果輸入字符串2是1-然後我應該從第一字

返回字符串如果輸入字符串是3-然後我我應該從第3個字返回字符串,
如果輸入字符串是1,2,那麼我應該返回字1和2

一個不能假設多於一個空間是定界符

例如

3-應返回C [SPACE] [SPACE] d [SPACE] [SPACE]ë

請考慮[ SPACE]作爲實際空格字符

+0

這真讓醜陋很快。那麼「4,1,2」呢?這是否會返回「A B D E」? – mlathe 2010-08-14 21:42:21

+0

這應該返回D [空格] [空格],A,B – Avinash 2010-08-14 21:44:11

+0

所以,你的函數應該返回多個值? – Svante 2010-08-14 22:19:52

回答

1

你沒有說什麼語言,所以... Java! 這是哈克,並假定輸入是有效的,但可能是一個很好的起點

public void foo(String input, String q) { 
    //First clean up the input string so that all tokens are delimited by one space 
    input = input.replaceAll(" *", " "); 

    String[] inputTokens = input.split(",");  
    String[] queries = q.split(","); 
    for (String query : queries) { 
    if (query.endsWith(-)) { 
     query = query.replace("-", ""); 
     for (int i = Integer.parseInt(query), i <= inputTokens.length; i++) { 
     System.out.println(inputTokens[i]); 
     } 
    } else { 
     System.out.println(inputTokens[Integer.parseInt(query)]); 
    } 
    } 
+0

我最初想到了這些方面的內容,但是發現OP希望保留多個空格,所以你不能使用'string.split'和'string.join'類型的功能。 – ChrisF 2010-08-14 21:52:10

+0

實際上API是「String [] split(String regex)」。所以你可以做一個像「*」之類的正則表達式,或者類似的東西。 – mlathe 2010-08-15 02:45:45

1

使用只匹配一個空格的正則表達式(即類似於"[^ ] [^ ]"的東西)來查找應該將字符串拆分爲數組或某種列表的位置。然後返回數組的相關部分。

0

這裏有一個辦法做到這一點在Python

import re 

def f(s1,s2): 
    items = re.findall("[^ ]+| +",s1) 
    result = [] 
    for idx in s2.split(','): 
     i,j,_ = idx.partition("-") 
     i=int(i)-1 
     result.append(''.join(items[i:None if j else i+1])) 
    return ','.join(result) 

assert f("A B C D E", "3-") == "C D E" 
assert f("A B C D E", "1,2") == "A,B" 
assert f("A B C D E", "4-,1,2") == "D E,A,B"