在给定的int处拆分长字符串

时间:2015-02-10 18:39:10

标签: java string

我有一个编程访谈,他们让我写一个方法,它接受一个长字符串和一个int作为参数,并且该方法应该在数字的每个间隔分割字符串。我无法理解如何做到这一点,所以我想我会问这里是否有任何想法。

顺便说一句:不幸的是我没有得到这份工作......

2 个答案:

答案 0 :(得分:5)

很抱歉听到采访。它糟透了......它发生了。 +1跟进问题。

在splitter函数中,我使用索引运行“long string”。每次迭代我都使用String.substring方法从字符串中提取区间大小。 (索引+间隔)。提取后,我用间隔递增索引。因此,逐个间隔地移动长串。

可能会发生索引+间隔大于长字符串的长度。 (将导致超出限制的行为)因此额外检查以避免它,并保存剩余的字符串。

public static void main(String[] args) {
    String veryLongString = "12345678901234567890";
    List<String> subStrings = splitter(veryLongString, 3);
    // Print the result
    for (String s : subStrings) {
        System.out.print(s + " ");
    }
}

public static List<String> splitter(String string, int interval) {
    int index = 0;
    List<String> subStrings = new ArrayList<String>();
    while (index < string.length()) {
        // Check if there is still enough characters to read.
        // If that is the case, remove it from the string.
        if (index + interval < string.length()) {
            subStrings.add(string.substring(index, index + interval));
        } else {
            // Else, less the "interval" amount of characters left,
            // Read the remaining characters.
            subStrings.add(string.substring(index, string.length()));
        }
        index += interval;
    }
    return subStrings;
}

输出:

123 456 789 012 345 678 90

答案 1 :(得分:1)

抱歉不幸。下次好运。我想用递归来回答这个问题。它使算法更简单。

这是我遵循的原则

  1. 如果字符串的长度小于或等于间隔,我们将其存储起来,然后我们退出方法
  2. 否则我们把子串从索引0转到间隔-1,这是String.subString(0,interval)然后我们存储然后我们在String.subString(interval)上调用方法
  3. 以下是代码:

    import java.util.ArrayList;
    import java.util.List;
    
    public class StringHelper {
    
        private static List<String> workList = new ArrayList<String>();
    
        private StringHelper()
        {
    
        }
    
        public static void intervallSplit(String datas, int interval) {
            if (datas.length() <= interval) {
                workList.add(datas);
                return;
            }
    
            workList.add( datas.substring(0,interval));
            intervallSplit(datas.substring(interval), interval);
    
    
        }
    
    
        public static void main(String[] args) {
            String text = "1234567891011121314151617181920";
            intervallSplit(text, 3);
    
            System.out.println(workList);
        }
    
    }
    

    以下是带有示例数据的示例的输出

    [123,456,789,101,112,131,415,161,718,192,0]