2010-08-14 67 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"