Algorithm 字符串格式化算法建议
我有以下问题: 输入字符串1:“A[SPACE]B[SPACE]C[SPACE][SPACE]D[SPACE][SPACE]E”Algorithm 字符串格式化算法建议,algorithm,Algorithm,我有以下问题: 输入字符串1:“A[SPACE]B[SPACE]C[SPACE][SPACE]D[SPACE][SPACE]E” 输入字符串2:“1-”或“1,2”或“3-” 若输入字符串2是1-那个么我应该从第一个单词返回字符串 如果输入字符串是3-那么我应该从第三个单词返回字符串, 如果输入字符串是1,2,那么我应该返回单词1和2 不能假定多个空格是分隔符 比如说 3-应返回C[空格][空格]D[空格][空格]E 请考虑[Sale]作为实际的空间字符使用一个只与单个空间匹配的正则表达式(即,
输入字符串2:“1-”或“1,2”或“3-” 若输入字符串2是1-那个么我应该从第一个单词返回字符串 如果输入字符串是3-那么我应该从第三个单词返回字符串,
如果输入字符串是1,2,那么我应该返回单词1和2 不能假定多个空格是分隔符 比如说 3-应返回C[空格][空格]D[空格][空格]E
请考虑[Sale]作为实际的空间字符
使用一个只与单个空间匹配的正则表达式(即,如“代码>”[^ ] [^ ] >代码>,以找到将字符串分割成数组或某种列表的位置。然后返回数组的相关部分。
您没有说是哪种语言。。。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)]);
}
}
public void foo(字符串输入,字符串q){
//首先清理输入字符串,以便所有标记都由一个空格分隔
input=input.replaceAll(“*”,“”);
字符串[]InputOkens=input.split(“,”);
字符串[]查询=q.split(“,”);
for(字符串查询:查询){
if(query.endsWith(-){
query=query.replace(“-”,”);
对于(inti=Integer.parseInt(query),我这里有一种在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"
这真的很快变得很难看。“4-,1,2”怎么办?它是否返回“A B D E”?这应该返回D[SPACE][SPACE],A,BSo,你的函数应该返回多个值?没有带、包含或任何其他特殊字符的最终字符串不应该是D[SPACE][SPACE]E、 A,B
?我最初考虑了一些类似于这些内容的东西,但发现OP希望保留多个空格,这样您就不能使用string.split
和string.join
类型功能。实际上API是“string[]split(string regex)”。所以您可以使用类似“*”之类的正则表达式。