从字符串中删除随机字符

时间:2017-02-08 04:23:09

标签: java string random

这是一个学校项目。目标是创建一个读取用户输入的程序,然后通过随机删除字符缩短该输入,直到达到140个字符。这是我到目前为止所做的。目前,它只删除一个字符,然后停止运行。感谢您的任何建议

import java.util.Scanner;
import java.util.Random;

public class Main {

public static void main(String[] args) {

        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter the tweet you want to shorten:");
        String tweet = null;

        tweet = keyboard.nextLine();

        int tweetLength = tweet.length();

        Random rand = new Random();


        do {

        } while (tweetLength <= 140); {
            int characterposition = rand.nextInt(tweetLength);
            String shorttweet = tweet.substring(0, characterposition-1);
            String shorttweet2 = tweet.substring(characterposition);

            tweet = shorttweet + shorttweet2;
            System.out.println("Shortented Tweet: " + tweet);
            tweetLength = tweet.length();

        } 

2 个答案:

答案 0 :(得分:1)

循环的格式错误。你应该使用:

public static void main(String[] args) {

    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter the tweet you want to shorten:");
    String tweet = null;

    tweet = keyboard.nextLine();

    int tweetLength = tweet.length();

    Random rand = new Random();

    while (tweetLength > 140) {
        int characterposition = rand.nextInt(tweetLength);
        String shorttweet = tweet.substring(0, characterposition);
        String shorttweet2 = tweet.substring(characterposition + 1);

        tweet = shorttweet + shorttweet2;
        System.out.println("Shortented Tweet: " + tweet);
        tweetLength = tweet.length();
    } 

之前你所拥有的是一个空的do-while循环,后跟一个代码块,这就是为什么它只发生一次。请注意,我也改变了循环条件 - 我们应该在长度大于140时循环,而不是在小于。

出于学习目的,以下是您的原始循环:

do {
    //you didn't do anything inside the loop!
} while (tweetLength <= 140);

//all of your code was after the loop

编辑:

我们还需要修复此行rand.nextInt(tweetLength),因为这将在0(包括)和int之间返回tweetLength(不包括)。当这返回0时,下一行将中断,因为您正在调用substring(0, -1)。感谢PatrickParker这一点

答案 1 :(得分:1)

您最好将String替换为StringBuilder,这对于此类操作要快得多:

private static String shorten(String str, int length) {
    StringBuilder sb = new StringBuilder(str);
    Random rand = new Random();
    while (sb.length() > length) {
        int pos = rand.nextInt(sb.length());
        // The deleteCharAt() method deletes the char at the given
        // position, so we can directly use the retrieved value
        // from nextInt() as the argument to deleteCharAt().
        sb.deleteCharAt(pos);
    }
    return sb.toString();
}

回答你的问题:

您正在使用do-while循环,其格式为:

do {
    // Things to do
} while (condition);

这段代码背后的阻塞与此循环无关。它只是一个匿名代码块

{
    // Statements
}

首先执行空do-while循环,然后执行下面的代码 - 当然。

您应该使用while循环代替:

while (lengthOfString > 140) {
    // remove a character
}