我的任务是取一个用户句子,然后用大写字母分隔,并在添加" "
后将这些字母写成小写。
我想添加一个空格添加该位置,以便在用户输入"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();
}
}
答案 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()
方法,它采用正则表达式。不幸的是,你还想保留分隔符(这是大写字母),因此稍微复杂一些,但仍然可以使用Pattern
和Matcher
将匹配的分隔符放回字符串中:
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"