字符串反转,结果错误

时间:2018-03-08 20:50:26

标签: java string reverse

所以我的问题是关于获得反向字符串但只有更长或等于5个字符的单词。 因此,如果我们通过(“嘿同胞战士”)方法,我们应该得到“嘿wollef sroirraw”作为回报。我的代码给了我一些奇怪的结果,这些结果是“sroirraw战友”。

这是我的代码,请给我一些线索。不应该返回最后一个单词之后的空格,但我不知道为什么会这样。

public class PrimeChecker {

public String spinWords(String sentence) {

    String[] tablica = sentence.split(" ");

    for ( String x : tablica ) {
        int y = 0;
        if (  x.length() >= 5 ) {
            StringBuilder p = new StringBuilder(x).reverse();
            x = p.toString();
        }
        tablica[y] = x;
        y++;            
    }

    StringBuilder wynik = new StringBuilder();

    for ( String z : tablica ) {
        int y = 0;
        tablica[y] = z;
        wynik.append(tablica[y]);
        if (tablica.length > 1 && y != tablica.length - 1 ) {
            wynik.append(" ");
        }
        y++;
    }
    return wynik.toString();
}   
}

测试

public class PrimeCheckerTest {
    public static void main(String[] args) {
        PrimeChecker obiekt = new PrimeChecker();
        System.out.println(obiekt.spinWords("Hey fellow warriors").toString());     
    }
}

4 个答案:

答案 0 :(得分:2)

首先,我希望与\\s+分开,该Arrays.stream与一个或多个空白字符匹配。其次,我会在令牌split上使用带map的lambda。然后我会StringBuilder每个单词,用5个或更多个字符反转每个单词。这可以使用reverse()static来完成。由于这种方法不需要任何实例状态,我们可以使它Collector。最后,将单词与public static String spinWords(String sentence) { return Arrays.stream(sentence.split("\\s+")) .map(s -> s.length() >= 5 ? new StringBuilder(s).reverse().toString() : s) .collect(Collectors.joining(" ")); } 一起加入。像,

public static void main(String[] args) {
    System.out.println(spinWords("Hey fellow warriors"));
}

并测试它

Hey wollef sroirraw

给出(如指定)

    QList<QMenu*> menus;
menus = ui->menuBar->findChildren<QMenu*>();

foreach (QMenu* menu, menus)
{
    foreach (QAction* action, menu->actions())
    {
        if(action->isCheckable()){
        action->setChecked(false);
        }
    }
}

答案 1 :(得分:1)

以下代码可行。你在循环中添加了y = 0。这是不必要的。

return DB::table('users')
    ->leftJoin('bet', function ($join) use ($competition_id) {
        $join->on('users.id', '=', 'bet.user_id');
        $join->on('bet.competition_id', '=', DB::raw("$competition_id"));
    })
    ->select('users.*', DB::raw('SUM(points) as score'))
    ->groupBy('users.id')
    ->groupBy('users.name')
    ->groupBy('users.firstName')
    ->groupBy('users.lastName')
    ->groupBy('users.email')
    ->groupBy('users.admin')
    ->groupBy('users.password')
    ->groupBy('users.remember_token')
    ->groupBy('users.created_at')
    ->groupBy('users.updated_at')->get();
}

答案 2 :(得分:0)

你需要在for loop之外定义y,在第二个循环之前给它赋值为零,因为你重置每个循环的y值。

答案 3 :(得分:0)

你可以用更简单的方式做到:

public String spinWords(String sentence) {

    String[] tablica = sentence.split(" ");

    for (int i = 0; i < tablica.length; i++) {

        if(tablica[i].length() >= 5) {
            StringBuilder p = new StringBuilder(tablica[i]).reverse();
            tablica[i] = p.toString();
        }
    }

    StringBuilder builder = new StringBuilder();
    for(String s : tablica) {
        builder.append(s + " ");
    }
    String str = builder.toString();

    return str;
}