处理字符串以使用相应的索引创建新的字符串

时间:2018-07-24 13:48:59

标签: java stringbuilder

  

input:有一天

String[] words = sb.toString().split("//s");
    StringBuilder sbFinal = new StringBuilder();

    for(int i=0;i<words[0].length() ;i++){
        for(int j=0;j<words.length;j++){
            sbFinal.append(words[j].charAt(i));
        }
    }

    return sbFinal.toString() ;
  

输出:生日

我有许多字符串,我需要将其转换为打印一组新字符串(用空格分隔)的形式,这些字符串由给定的每个字符串的各个字符组成。

  

所需的输出:hae和通过ecy

例如,我们有3个单词,每个单词4个字符,我们想要4个单词,每个单词3个字符。

有anic eday =>有并且通过ecy

我们从所有3个单词中选择第一个字符,以制成新的第一个单词。

我使用了上面显示的代码,但是它将输入本身打印为输出。

2 个答案:

答案 0 :(得分:2)

使用简单的for循环和一个数组:

public class SO {

    public static void main(String args[]) {
        String input = "have anic eday ";

        // Split the input.
        String[] words = input.split("\\s");
        int numberOfWords = words.length;
        int wordLength = words[0].length();

        // Prepare the result;
        String[] result = new String[wordLength];

        // Loop over the new words.
        for (int i = 0; i < wordLength; i++) {
            // Loop over the characters in each new word.
            for (int j = 0; j < numberOfWords; j++) {
                // Initialize the new word, if necessary.
                String word = result[i] != null ? result[i] : "";

                // Append the next character to the new word.
                String newChar = Character.toString(words[j].charAt(i));
                result[i] = word + newChar;
            }
        }

        for (String newWord : result) {
            System.out.println(newWord);
        }
    }
}

输出:

hae
and
via
ecy

答案 1 :(得分:1)

尽管回答了,但我用最初的sysout而不是return组成了一个与您最初设计的版本更相似的版本,但是更改了您的需求,或者只是调整了.split()行:

String sb = "have anic eday";
String[] words = sb.split("\\s"); //you need to use BACKWARDSLASH "\\s" to get it to work.
StringBuilder sbFinal = new StringBuilder();


for (int i = 0; i < words[0].length(); i++) {
    for (int j = 0; j < words.length; j++) {
        sbFinal.append(words[j].charAt(i));
    }
    sbFinal.append(" ");
}

System.out.println(sbFinal.toString());

您用“ // s”分割,但是“”或“ \\ s”似乎工作得很好。