所以我的问题是关于获得反向字符串但只有更长或等于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());
}
}
答案 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;
}