我正在尝试使用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。请不要猛击我,我是编码的新手:)
答案 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);
}
要做的工作是确保结束位置不大于字符串的长度,否则,请选择该位置作为最终索引