我有一个目标:
1)将字符乘以字符串n次(字符,字符串,n [int]-来自用户输入)
示例:
用户输入1(字符串):将来
用户输入2(字符):u
用户输入3(整数):2
输出:功能
首先我尝试使用char []数组,但是IndexOutOfBoundsException使我回到了现实。第二个try-StringBuilder,但是它不工作以及空结果窗口。我应该使用StringBuilder(如果答案是肯定的,怎么办?)?还是有其他更好的解决方案。
谢谢您的帮助。
package Basics.Strings;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Ex4 {
static String giveAWord() {
Scanner scanWord = new Scanner(System.in);
System.out.println("Give a word");
String word = scanWord.nextLine();
return word;
}
static char giveALetter() {
Scanner scanALetter = new Scanner(System.in);
System.out.println("Give a letter");
char let = scanALetter.next().charAt(0);
return let;
}
static int giveANumber() {
Scanner scanNumber = new Scanner(System.in);
System.out.println("Give a number");
int numb = scanNumber.nextInt();
return numb;
}
static String multiplyLetter(String word, char letter, int number) {
StringBuilder sb= new StringBuilder();
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i)==letter) {
sb.append(i*number);
}
}
return sb.toString();
}
public static void main(String[] args) {
String word = giveAWord();
char letter = giveALetter();
int number = giveANumber();
System.out.println(multiplyLetter(word, letter, number));
}
}
答案 0 :(得分:1)
您的multiplyLetter
方法中有几件事会使它无法正常工作。
首先,您必须使用以下单词来初始化StringBuilder
:
StringBuilder sb = new StringBuilder(word) ;
否则,您的StringBuilder
将为空。
第二,您应该使用insert(int pos, char c)
方法,以便可以指定要在何处插入字符。
然后最后,您不能只将char
和int
相乘就可以了。如果您想重复插入一个字符,我认为您应该使用循环。
因此,总而言之,请尝试:
StringBuilder sb= new StringBuilder(word);
for (int i = 0; i < sb.length(); i++) {
if (sb.charAt(i)==letter) {
for ( int j = 0 ; j < number ; j++ ) {
sb.insert(i, letter);
i++ ;
}
}
}
注意,我在循环内添加了i++
,因为sb.length()
随着插入的每个字符都会增加。
此外,也许更有经验的人可以提供比仅使用循环更有效的方法。
答案 1 :(得分:1)
如果您至少使用Java 11(11),则可以进行以下操作:
String word = "future";
String letter = "u";
int count = 2;
String replacement = letter.repeat(count);
String result = word.replace(letter, replacement);
请注意,Java 11中仅添加了方法repeat(int)
。
在Java 5中添加了方法replace(CharSequence, CharSequence)
答案 2 :(得分:0)
Java 8功能方式:
String alterString(String input, Character charMatch, int times) {
return input.chars()
.mapToObj(c -> (Character) c) // converting int to char
.flatMap(c -> {
if (c == charMatch) {
Character[] ca = new Character[times];
Arrays.fill(ca, c);
return Arrays.stream(ca); // stream of char c repeated 'times' times
}
return Stream.of(c);
})
.collect(
// following is the string collecting using StringBuilder form stream of characters
Collector.of(
StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString,
);
);
}
答案 3 :(得分:0)
解决此问题的一种简单方法是使用以下功能:
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
System.out.print("Enter the string: ");
String str = kb.nextLine();
System.out.print("Enter the character: ");
String ch = kb.nextLine();
System.out.print("How many times to repeat?: ");
int n = kb.nextInt();
String result = str.replace(ch, String.join("", Collections.nCopies(n, ch)));
System.out.println("Result: " + result);
}
}
示例运行:
Enter the string: future
Enter the character: u
How many times to repeat?: 2
Result: fuutuure