我一直在完成这项练习,而我的输出并不是我所期望的。
(检查子字符串)您可以检查字符串是否是另一个字符串的子字符串 通过在String类中使用indexOf方法。编写自己的方法 这个功能。编写一个程序,提示用户输入两个字符串,和 检查第一个字符串是否是第二个字符串的子字符串。
**我的代码以两种方式妥协于问题的规范:它只能将匹配的子字符串显示为3个字母,并且它不能用于少于4个字母的字符串文字。我错误地开始编写程序而不使用建议的方法indexOf。我的程序的目标(虽然它不应完全偏离任务的目标)是设计一个程序,确定两个字符串是否共享至少三个连续的字母。
该程序的主要错误是它生成数字而不是char字符。我已经通过几个不成功的想法来发现逻辑错误是什么。我首先尝试识别char字符(根据我的理解,在unicode中承保)是否转换为整数,考虑到输出的数字也是三个字母长。没有参考参考,我知道这不是真的。比较java和javac输出的312之间的比较,以及abab和ababbab输出组合219之间的比较.j应该>湾我的下一个想法是输出是我使用的数组的索引。再一次,这不是真的。如果我的推理是真的,那么java和javac之间的比较会输出0。
public class Substring {
public static char [] array;
public static char [] array2;
public static void main (String[]args){
java.util.Scanner input = new java.util.Scanner (System.in);
System.out.println("Enter your two strings here, the longer one preceding the shorter one");
String container1 = input.next();
String container2 = input.next();
char [] placeholder = container1.toCharArray();
char [] placeholder2 = container2.toCharArray();
array = placeholder;
array2 = placeholder2;
for (int i = 0; i < placeholder2.length; i++){
for (int j = 0; j < placeholder.length; j ++){
if (array[j] == array2[i]) matcher(j,i);
}
}
}
public static void matcher(int higher, int lower){
if ((higher < array.length - 2) && (lower < array2.length - 2))
if (( array[higher+1] == array2[lower+1]) && (array[higher+2] == array2[lower+2]))
System.out.println(array[higher] + array[higher+1] + array[higher+2] );
}
}
答案 0 :(得分:1)
+
运算符将short
s,char
和byte
个操作数提升为int
s,所以
array[higher] + array[higher+1] + array[higher+2]
的类型为int
,而不是类型char
,这意味着
System.out.println(...)
绑定到
System.out.println(int)
将其参数显示为十进制数,而不是绑定到
System.out.println(char)
使用PrintStream
编码输出给定字符。