将单个字符乘以字符串中给定的数字

时间:2020-06-06 17:47:01

标签: java arrays string

我有一个目标:

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));
}
}

4 个答案:

答案 0 :(得分:1)

您的multiplyLetter方法中有几件事会使它无法正常工作。

首先,您必须使用以下单词来初始化StringBuilder

StringBuilder sb = new StringBuilder(word) ;

否则,您的StringBuilder将为空。

第二,您应该使用insert(int pos, char c)方法,以便可以指定要在何处插入字符。

然后最后,您不能只将charint相乘就可以了。如果您想重复插入一个字符,我认为您应该使用循环。

因此,总而言之,请尝试:

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)

解决此问题的一种简单方法是使用以下功能:

  1. String#join
  2. Collections#nCopies
  3. String#replace

演示:

    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