#java #arrays #string #loops #char
Вопрос:
Я пытаюсь распечатать строку, чередуя ее регистры букв. Я хочу YourString
выйти в роли YoUrStRiNg
. Я пробовал три вещи, но не могу заставить цикл работать так, как мне нужно. Вот что у меня есть до сих пор:
//one attempt
String s = "yourString";
String x = "";
for (int i = 0; i < s.length(); i = 2) {
for (int j = 1; j < s.length(); j = 2) {
x = Character.toUpperCase(s.charAt(i));
x = Character.toLowerCase(s.charAt(j));
}
}
System.out.println(x);
//the desired result but not the ideal solution
String[] sArray = {"Your", "String"};
String f = "";
for (String n : sArray) {
f = n;
}
char[] c = f.toUpperCase().toCharArray();
char[] d = f.toLowerCase().toCharArray();
System.out.print(c[0]);
System.out.print(d[1]);
System.out.print(c[2]);
System.out.print(d[3]);
System.out.print(c[4]);
System.out.print(d[5]);
System.out.print(c[6]);
System.out.print(d[7]);
System.out.print(c[8]);
System.out.print(d[9]);
System.out.println();
//third attempt with loop but the first loop keeps starting from zero
String t = "";
for (int i = 0; i < c.length; i = 2) {
for (int j = 1; j < d.length; j = 2) {
t = Character.toUpperCase(c[i]);
t = Character.toLowerCase(d[j]);
}
System.out.print(t);
}
Что я делаю не так?
Комментарии:
1. Я не хочу портить полный ответ, так как это, вероятно, какое-то задание по программированию. Поэтому вы должны повторить строку только один раз, и если символ прописной, вы должны сделать его строчным, и наоборот. Такая функция, как docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/… может пригодиться для этого.
2. @Sebi Цель состоит не в том, чтобы поменять существующий случай, а в том, чтобы чередовать его в зависимости от позиции.
3. Не желая портить ответ, повторите строковые символы и используйте что-то вроде
i % 2 == 0 ? Character.toUpperCase(text.charAt(i)) : Character.toLowerCase(text.charAt(i))
, чтобы решить, что делать.
Ответ №1:
На самом деле, нет необходимости повторять несколько раз элементы строки. Поскольку вам нужно альтернативно изменить регистр символа, вы можете просто посчитать позицию вашей итерации с помощью оператора %
. Так, например, в c
качестве текущего строкового символа операция будет выглядеть следующим образом:
System.out.print(i % 2 == 0, (char)Character.toUpperCase(c) : (char)Character.toLowerCase(c));
Тем не менее, вы действительно можете воспользоваться преимуществами потока Java и лямбда-выражения, чтобы реализовать очень элегантное решение для этого.
Я собираюсь показать вам мое предлагаемое решение. Единственная проблема заключается в том, что на самом деле у вас не может быть правильной переменной цикла, так как переменная, к которой вы обращаетесь внутри выражения lamba, должна быть окончательной или эффективной, поэтому я использовал для этого своего рода трюк.
Это просто для того, чтобы дать вам представление о том, что вы действительно можете персонализировать, сделать его многоразовым и улучшить по своему усмотрению:
public class MyStringTest {
public static void main(String args[]) {
String s = "yourString";
initializeCycleVariable();
s.chars().forEach(c ->
{System.out.print( MyStringTest.getAndIncrement() %2 == 0 ?
(char)Character.toUpperCase(c) :
(char)Character.toLowerCase(c));
});
}
private static int i = 0;
public initializeCycleVariable() { i = 0; }
public static int getAndIncrement() { return i ; }
}
И вот результат:
YoUrStRiNg
Комментарии:
1. Не знал, что операнд модуля можно использовать для итераций, спасибо.
2. @DazedandConfucius если вы довольны ответом, пожалуйста, примите его и поддержите, чтобы он мог помочь другим разработчикам в будущем. Спасибо.
Ответ №2:
Вы должны перебирать строку символ за символом. Вы можете использовать верхний регистр для четных индексов и нижний регистр для нечетных. Извините, что не предоставил более подробной информации, но ясно, что это задание.
Комментарии:
1. вы могли бы привести пример, по крайней мере, для демонстрации того, что вы написали.
2. Это не задание, я даже не записан ни на какие летние курсы. Это всего лишь одно из многих упражнений, которые я даю себе, чтобы улучшить свои навыки программирования.
Ответ №3:
Попробуйте это,
String s = "yourString", x = "";
for(int i = 0; i < str.length(); i ){
if(i % 2 == 0)
x = Character.toUpperCase(s.charAt(i));
else
x = Character.toLowerCase(s.charAt(i));
}
System.out.println(x);
Комментарии:
1. Я чувствую, что этот фрагмент проще.