如果字符串具有相同的前缀和后缀,我想删除字符串的后3个字符。例如:字符串是"systemsys"
,它应该显示system
。我尝试输入的内容很少:incgoogleinc
。不适用于此输入
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String str = s.nextLine();
if(str.length() > 3) {
if (str.startsWith(str.substring(0, 3)) == (str.substring(str.length()-3, str.length()-1))) {
System.out.println(str.substring(0, str.length()-3));
} else {
System.out.println(str);
}}}
不适用于其他输入:mictestingmic
,comwebsitecom
答案 0 :(得分:2)
if (str.startsWith(str.substring(0, 3)) == (str.substring(str.length()-3, str.length()-1))) {
str.startsWith(str.substring(0, 3))
返回一个布尔值(由于您要问它是否以字符串的开头开始(总是如此),所以它总是正确的。)
str.substring(str.length()-3, str.length()-1))
对于“ mictestmic”,由于substring()
使用包含/排除范围,因此它将返回“ mi”。
因此,您的if
语句的计算结果为:
if (true == "mi") {
相反,只需检查字符串是否以结尾开头:
if (str.startsWith(str.substring(str.length()-3))) {
答案 1 :(得分:1)
我不知道您是否可以在作业中使用正则表达式,但这在这里很方便:
String input = "mictestingmic";
if (input.matches("(.+).*\\1")) {
input = input.substring(0, input.length()-3);
}
System.out.println(input);
这将打印mictesting
,删除最后三个字符,但是mictestingcan
将打印相同的输入,因为它确实具有匹配的前缀和后缀。