如何在Java中按位置拆分字符串

时间:2010-10-26 11:26:24

标签: java string

我没有找到任何答案..如果我有:String s = "How are you"? 如何将其拆分为两个字符串,因此第一个字符串包含0..s.length()/2而第二个字符串来自s.length()/2+1..s.length()

谢谢!

7 个答案:

答案 0 :(得分:22)

这应该做:

String s = "How are you?";
String first = s.substring(0, s.length() / 2);  // gives "How ar"
String second = s.substring(s.length() / 2);    // gives "e you?"

(请注意,如果字符串的长度为奇数,则由于整数除法中的舍入,second将比first多一个字符。)

答案 1 :(得分:5)

你可以使用'substring(start,end)',但当然检查string之前是否为null:

String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);

你期待奇数长度的字符串吗?在这种情况下,您必须添加逻辑以正确处理此案例。

答案 2 :(得分:5)

String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);

只要s0不为空。

修改

这适用于奇数长度字符串,因为您没有向任一索引添加1。令人惊讶的是,它甚至适用于零长度字符串“”。

答案 3 :(得分:4)

这是一种将字符串按长度分成 n 项的方法。 (如果字符串长度不能完全除以 n ,则最后一项将更短。)

public static String[] splitInEqualParts(final String s, final int n){
    if(s == null){
        return null;
    }
    final int strlen = s.length();
    if(strlen < n){
        // this could be handled differently
        throw new IllegalArgumentException("String too short");
    }
    final String[] arr = new String[n];
    final int tokensize = strlen / n + (strlen % n == 0 ? 0 : 1);
    for(int i = 0; i < n; i++){
        arr[i] =
            s.substring(i * tokensize,
                Math.min((i + 1) * tokensize, strlen));
    }
    return arr;
}

测试代码:

/**
 * Didn't use Arrays.toString() because I wanted to have quotes.
 */
private static void printArray(final String[] arr){
    System.out.print("[");
    boolean first = true;
    for(final String item : arr){
        if(first) first = false;
        else System.out.print(", ");
        System.out.print("'" + item + "'");
    }
    System.out.println("]");
}

public static void main(final String[] args){

    printArray(splitInEqualParts("Hound dog", 2));
    printArray(splitInEqualParts("Love me tender", 3));
    printArray(splitInEqualParts("Jailhouse Rock", 4));

}

<强>输出:

  

['猎犬','狗']
  ['爱','我te','nder']
  ['Jail','hous','e Ro','ck']

答案 4 :(得分:2)

使用String.substring(int)String.substring(int, int)方法。

int cutPos = s.length()/2;
String s1 = s.substring(0, cutPos);
String s2 = s.substring(cutPos, s.length()); //which is essentially the same as
//String s2 = s.substring(cutPos);

答案 5 :(得分:2)

  

我没有找到任何答案。

您应该始终关注的第一个地方是相关课程的javadoc:在这种情况下java.lang.String。 javadocs

答案 6 :(得分:0)

public int solution(final String S, final int K) {
    int splitCount = -1;
    final int count = (int) Stream.of(S.split(" ")).filter(v -> v.length() > K).count();
    if (count > 0) {
        return splitCount;
    }

    final List<String> words = Stream.of(S.split(" ")).collect(Collectors.toList());
    final List<String> subStrings = new ArrayList<>();
    int counter = 0;
    for (final String word : words) {
        final StringJoiner sj = new StringJoiner(" ");
        if (subStrings.size() > 0) {
            final String oldString = subStrings.get(counter);
            if (oldString.length() + word.length() <= K - 1) {
                subStrings.set(counter, sj.add(oldString).add(word).toString());
            } else {
                counter++;
                subStrings.add(counter, sj.add(word).toString());
            }
        } else {
            subStrings.add(sj.add(word).toString());
        }
    }

    subStrings.forEach(
            v -> {
                System.out.printf("[%s] and length %d\n", v, v.length());
            }
    );
    splitCount = subStrings.size();
    return splitCount;
}

public static void main(final String [] args){

    final MessageSolution messageSolution = new MessageSolution();
    final String message = "SMSas5 ABC DECF HIJK1566 SMS POP SUV XMXS MSMS";
    final int maxSize = 11;
    System.out.println(messageSolution.solution(message, maxSize));

}