Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 字符串格式化算法建议_Algorithm - Fatal编程技术网

Algorithm 字符串格式化算法建议

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]作为实际的空间字符使用一个只与单个空间匹配的正则表达式(即,

我有以下问题:

输入字符串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]作为实际的空间字符

使用一个只与单个空间匹配的正则表达式(即,如“代码>”[^ ] [^ ] >代码>,以找到将字符串分割成数组或某种列表的位置。然后返回数组的相关部分。

您没有说是哪种语言。。。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)”。所以您可以使用类似“*”之类的正则表达式。