インデックス範囲に従って文の単語の順序を逆にします

トピック情報

文が与えられると、文の各単語はスペースで区切られ、単語の範囲が与えられると、範囲内の単語の順序が逆になります。たとえば、ある文が与えられた場合、私は学生です。1から3の単語範囲が与えられた場合、反転した後の結果はi学生です。

  • 入力例私は学生です。13
  • 学生の出力例。

回答

トピック情報によると、次の情報を大まかに導き出すことができます。

  1. プログラムは3つのパラメータ情報を受信して​​使用する必要があります
  2. 単語はスペースで区切られます。文が与えられたら、splitを使用して単語を分割する必要があります。
  3. 分割された単語をトラバースし、指定された範囲内の単語の順序を逆にします

コーディング

package com.questionbank.nowcoder;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ReverseControlWords {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
	
		// 定义索引位置,方便接收参数值
		int index = 0;
		
		// 定义三个变量,分别接收句子,起始和结束索引范围
		String sentence = null;
		int start = 0;
		int end = 0;
		while ((input = br.readLine()) != null) {
			// 根据不同索引位置,将接收的输入值赋给不同变量
			if (index == 0) {
				sentence = input;
			} else if (index == 1) {
				start = Integer.valueOf(input);
			} else {
				// 在拿到第三个变量值后,进行逆序处理
				end = Integer.valueOf(input);
				reverseSentence(sentence, start, end);
			}
			
			// 参数位置后移
			index++;
			
			// 逆序后,索引置0
			if (index == 3) {
				index = 0;
			}
		}
	}
	
	public static void reverseSentence(String sentence, int start, int end) {
		String[] words = sentence.split(" ");
		StringBuilder sb = new StringBuilder();
		
		// 遍历单词数组
		for (int i=0; i<words.length; i++) {
			
			// i等于start且小于end时,对单词逆序处理
			if (i == start && i<end) {
				String tmp = words[i];
				words[i] = words[end];
				words[end] = tmp;
				
				// 逆序后,start位置后移,end位置前移
				start++;
				end--;
			}
			
			sb.append(words[i]).append(" ");
		}
		
		// 输出截取后的结果值
		System.out.println(sb.substring(0, sb.length()-1));
	}
}

 

おすすめ

転載: blog.csdn.net/magi1201/article/details/114462108