在特定点(Java)添加到Char数组的东西

时间:2016-09-25 17:44:05

标签: java arrays char add

我的任务是取一个用户句子,然后用大写字母分隔,并在添加" "后将这些字母写成小写。
我想添加一个空格添加该位置,以便在用户输入"HappyDaysToCome"时输出"Happy days to come"

当前代码

  public static void main(String[] args)
  {
    Scanner s = new Scanner(System.in);
    System.out.println("Please enter a sentence");
    String sentenceString = s.nextLine();
    char[] sentenceArray = sentenceString.toCharArray();
    for(int i = 0; i < sentenceArray.length; i++)
    {
        if(i!=0 && Character.isUpperCase(sentenceArray[i]))
        {
            Character.toLowerCase(sentenceArray[i]); 
            sentenceArray.add(i, ' ');    
        }

    }
    System.out.println(sentenceArray)
    s.close();
  }
}

3 个答案:

答案 0 :(得分:1)

数组没有function roll() { $.get( "/includes/randomRoller.php", function( data ) { $( "#bunnies" ).html( data ); }); } 方法。数组不可调整大小。如果您确实想要使用add数组,则需要分配一个足够大的数组,例如通过计算大写字母或简单地分配一个肯定足够大的数组(char[]长度减去1的两倍)。

String

或者更好地使用String input = ... String outputString; if (input.isEmpty()) { outputString = ""; } else { char[] output = new char[input.length() * 2 - 1]; output[0] = input.charAt(0); int outputIndex = 1; for (int i = 1; i < input.length(); i++, outputIndex++) { char c = input.charAt(i); if (Character.isUpperCase(c)) { output[outputIndex++] = ' '; output[outputIndex] = Character.toLowerCase(c); } else { output[outputIndex] = c; } } outputString = new String(output, 0, outputIndex); } System.out.println(outputString);

StringBuilder

答案 1 :(得分:0)

你以错误的方式接近这个。只需将每个字符串添加回新字符串,但在右侧位置包含空格。不要担心修改你的char数组。以下是对代码的略微修改:

  public static void main(String[] args)
  {
    Scanner s = new Scanner(System.in);
    System.out.println("Please enter a sentence");
    String sentenceString = s.nextLine();
    char[] sentenceArray = sentenceString.toCharArray();

    //new string to hold the output
    //starts with only the first char of the old string
    string spacedString = sentenceArray[0] + "";

    for(int i = 1; i < sentenceArray.length; i++)
    {
      if(Character.isUpperCase(sentenceArray[i]))
      {
        //if we find an upper case char, add a space and the lower case of that char
        spacedString = spacedString + " " + Character.toLowerCase(sentenceArray[i]);    
      }else {
        //otherwise just add the char itself
        spacedString = spacedString + sentenceArray[i];
      }
    }

    System.out.println(spacedString)
    s.close();
  }

如果要优化性能,可以使用StringBuilder对象。然而,为了区分单个句子,性能根本不会产生任何真正的差异。如果效果对您很重要,请在此处StringBuilder了解更多信息:https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

答案 2 :(得分:0)

我们基本上想要在大写字母上标记输入字符串。这可以使用正则表达式[A-Z][^A-Z]*来完成(即,一个大写,然后是零或更多&#34;不是&#34;大写)。 String类有一个内置的split()方法,它采用正则表达式。不幸的是,你还想保留分隔符(这是大写字母),因此稍微复杂一些,但仍然可以使用PatternMatcher将匹配的分隔符放回字符串中:

import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.List;
import java.util.ArrayList;
public class Foo {
  public static void main(String[] args) {
    String text = "ThisIsATest1234ABC";
    String regex = "\\p{javaUpperCase}[^\\p{javaUpperCase}]*";
    Matcher matcher = Pattern.compile(regex).matcher(text);
    StringBuffer buf = new StringBuffer();
    List<String> result = new ArrayList<String>();
    while(matcher.find()){
        matcher.appendReplacement(buf, matcher.group());
        result.add(buf.toString());
        buf.setLength(0);
    }   

    matcher.appendTail(buf);
    result.add(buf.toString());
    String resultString = ""; 
    for(String s: result) { resultString += s + " "; }
    System.out.println("Final: \"" + resultString.trim() + "\"");
  }
}

输出:

Final: "This Is A Test1234 A B C"