如何使用substring方法返回奇数字符串的3个中间字符?

时间:2019-01-27 02:37:16

标签: java string substring java.util.scanner

我正在尝试使用substring方法返回单词的中间3个字符,但是如果单词可以是任意大小(仅ODD),如何返回单词的中间3个字母?

我的代码如下。

import java.util.Scanner;
public class Main {
   public static void main(String[] args) {
     Scanner scnr = new Scanner(System.in);
     String inputWord;

     inputWord = scnr.next();

     System.out.println("Enter word: " + inputWord + " Midfix: " + inputWord.substring(2,5));

  }
}

在子字符串方法中使用2和5的原因是因为我尝试使用“ puzzled”一词进行测试,并且按预期方式返回了中间的三个字母。但是,如果我尝试例如“ xxxtoyxxx”,它将打印出“ xto”而不是“ toy”。

P.S。请不要猛击我,我是编码的新手:)

3 个答案:

答案 0 :(得分:1)

考虑以下代码:

String str = originalString.substring(startingPoint, startingPoint + length)

要确定startingPoint,我们需要找到String的中间,然后返回要检索的length字符的一半(在您的情况下为3) :

int startingPoint = (str.length() / 2) - (length / 2);

您甚至可以为此构建一个辅助方法:

private String getMiddleString(String str, int length) {
    if (str.length() <= length) {
        return str;
    }

    final int startingPoint = (str.length() / 2) - (length / 2);
    return "[" + str.substring(startingPoint, startingPoint + length) + "]";
}

  

完整示例:

class Sample {
    public static void main(String[] args) {
        String text = "car";

        System.out.println(getMiddleString(text, 3));
    }

    private static String getMiddleString(String str, int length) {

        // Just return the entire string if the length is greater than or equal to the size of the String
        if (str.length() <= length) {
            return str;
        }

        // Determine the starting point of the text. We need first find the midpoint of the String and then go back
        // x spaces (which is half of the length we want to get.
        final int startingPoint = (str.length() / 2) - (length / 2);
        return "[" + str.substring(startingPoint, startingPoint + length) + "]";

    }
}

在这里,我将输出放在[]中,以反映可能存在的任何空格。上面示例的输出为:[ppl]

使用这种动态方法,您可以在任意长度的String上运行相同的方法。例如,如果我们的text字符串是“这是一个更长的字符串...”,我们的输出将是:[ lo]


  

注意事项

  • 如果输入text的字符数为偶数,但length为奇数怎么办?您需要确定是否要舍入{{1 }}上/下或返回一组稍微偏离中心的字符。

答案 1 :(得分:0)

我认为您可以做的是计算字符串长度,然后除以2。这将为您提供中间的字符串,然后您可以在开头减去1,在结尾加上2。如果要获取奇数字符串的前两个,请在起始索引中减去2,在末尾添加1。

String word_length = inputWord.length()/2;
System.out.println("Enter word: " + inputWord + " Midfix: " + inputWord.substring((word_length-1, word_length+2));

希望这会有所帮助。

答案 2 :(得分:0)

这将获取字符串的中间部分,并返回中间的字符,并从中间索引处返回+1。

public static String getMiddleThree(String str) {
    int position, length;
    if (str.length() % 2 == 0) {
        position = str.length() / 2 - 1;
        length = 2;
    } else {
        position = str.length() / 2;
        length = 1;
    }
    int start = position >= 1 ? position - 1 : position;
    return str.substring(start, position + 1);
}

要做的工作是确保结束位置不大于字符串的长度,否则,请选择该位置作为最终索引