Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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
如何在Java中按位置拆分字符串_Java_String - Fatal编程技术网

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

如何在Java中按位置拆分字符串,java,string,Java,String,我没有找到答案。。如果我有:String s=“你好”? 如何将其拆分为两个字符串,第一个字符串包含from0..s.length()/2,第二个字符串包含froms.length()/2+1..s.length() 谢谢 您可以使用“substring(start,end)”,但当然要先检查字符串是否为null,然后再执行以下操作: String first = s.substring(0, s.length() / 2); String second = s.substring(s.leng

我没有找到答案。。如果我有:
String s=“你好”
? 如何将其拆分为两个字符串,第一个字符串包含from
0..s.length()/2
,第二个字符串包含from
s.length()/2+1..s.length()

谢谢

您可以使用“substring(start,end)”,但当然要先检查字符串是否为null,然后再执行以下操作:

String first = s.substring(0, s.length() / 2);
String second = s.substring(s.length() / 2);
你希望字符串的长度是奇数吗?在这种情况下,您必须添加逻辑以正确处理这种情况。

使用、和方法

这应该做到:

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?"
  • 使用一个参数返回从位置
    i

  • 使用两个参数返回从
    i
    开始到
    j-1
    结束的子字符串

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

只要s0不为空

编辑


这将适用于奇数长度字符串,因为两个索引中都没有添加1。令人惊讶的是,它甚至可以在长度为零的字符串上工作。

这里有一个方法,可以按长度将字符串拆分为n个项目。(如果字符串长度不能精确除以n,则最后一项将更短。)

输出:

/**
 * 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));

}
[‘猎犬’、‘狗’]
['Love'、'me te'、'nder']
['Jail','hous','e Ro','ck']

我没有找到答案

您应该经常查看的第一个地方是相关类的javadocs:在本例中为
java.lang.String
。javadocs

  • 可在Oracle网站(如在)上在线浏览
  • 包含在任何Sun/Oracle Java SDK发行版中
  • 可能可以在Java IDE中查看,并且
  • 并且可以通过谷歌搜索找到

您犯了一个错误:子字符串(beginPosition)。因此,子字符串(cutPos)与子字符串(0,cutPos)不同,而不是
s.substring(cutPos+1,s.length()),最好使用
s.substring(cutPos+1)对不起,这也不行。给出
“a”
“e you”
(如果您将
cutPos-
更改为
cutPos=
@aioobe,谢谢….s2上的cutPos+1是导致问题的原因。我已修复it@The精英先生,您可能想将第一个
-
也更改为
=
。但这甚至不起作用…它会给
一个“你”
“e you”
@Torres,不,这将丢失中间字符。(并对空字符串抛出异常)Alois的答案不正确,Torres也不正确。正确的答案是
string s=“你好吗?”;string first=s.substring(0,s.length()/2);string second=s.substring(s.length()/2)
我给出了一些提示,并解释了该方法的工作原理。抱歉,它并不是为了完全满足要求。现在更正了…@roddik:鉴于长度是一个int,2是一个int,这将进行整数除法,导致第一个字符串比第二个字符串短。请在代码中添加解释,以便对其他读者有用。拆分具有指定长度且不带分词符的字符串,预期输入包含无前导或尾随空格的字符串。
String s0 = "How are you?";
String s1 = s0.subString(0, s0.length() / 2);
String s2 = s0.subString(s0.length() / 2);
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));

}
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;
}
    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));

}