我必须用Java编写一个程序来比较两个破折号字符串。仅当每个字符串在字符串中的相同位置具有相同数量的短划线时,该测试才返回 true。
例:
比较以下两个字符串
字符串字符串 1 = "二二九">
字符串 string2 ="十四五,我饿了。">
使用上述条件将返回 true。一个字符串是否比另一个字符串长并不重要。
任何帮助将不胜感激!
我试过:
- 将字符串转换为字符数组,然后比较索引
- 对每个字符串使用 String.indexOf((,然后创建一个变量 int newStart = String.indexOf((,将前一个破折号的索引作为要查看的新起点
` public static void sameDashes(String string1, String string2) {
int count = 0;
char index1 = ' ';
char index2 = ' ';
char dash = '-';
char[] string1Array = string1.toCharArray();
char[] string2Array = string2.toCharArray();
while (count < string1Array.length && count < string2Array.length) {
if (string1Array[index1] == dash && string2Array[index2] == dash) {
System.out.println("true");
}
}
}
由于我怀疑这是家庭作业,所以我将概述一个解决方案。
- 使用
indexOf
方法循环访问 string1,并获得表示破折号位置的Integer
s 的List
。 - 以相同的方式循环访问 string2。 (可以调用常规方法两次。 一次使用字符串 1,一次使用字符串 2。
- 比较您的
List
,看看它们是否具有相同的size()
。 - 如果它们的大小相同,请遍历两个列表,看看位置是否相同。
使用String.split
超级简单:
- 用两端一个字符填充两个字符串(即
str = " " + str + " "
(。 - 对两个字符串调用
.split("-")
并存储生成的数组。 - 如果数组的长度不同,则字符串不匹配。
- 否则,比较每个数组中相应字符串的长度,如果任何对的长度不匹配,则字符串不匹配。除非它是最后一对字符串 - 那么它们可以是不同的长度并且它们仍然匹配(即忽略最后一对字符串 - 你不需要比较数组中最后一个索引处的字符串(。
- 否则,两个字符串匹配。
的简单算法是使用 indexOf()
和 charAt()
并循环遍历字符串的 -
实例之一。
- 从
0
处开始索引偏移量。 - 从给定偏移量获取
-
的下一个位置string1
。 - 检查
string2
是否包含找到的位置的字符,如果是,请检查它是否是-
。如果不是-
,则检查失败。 - 将索引偏移量设置为
string1
中的下一个-
,然后重复 #2。 - 在
string1
中找到所有-
后,检查string2
是否在字符串中比string1
包含的点更远的点包含-
。如果是,则检查失败。如果没有,则检查已通过!
示例概念验证:
int index = string1.indexOf("-", 0);
while (index > 0) {
// if string2 doesn't contain a dash at the current position, return false
if ((string2.length() <= index) || (string2.charAt(index) != "-")) return false;
index = string1.indexOf("-", (index + 1));
}
// do one last final check to see if string2 contains a dash that's further than string1's last dash
return !(string2.indexOf("-", string1.lastIndexOf("-") + 1) > 0);
我将为这个问题放置一个算法:
- 检查哪个
String
最短:s1 或 s2。让我们称短裤字符串为ss。
使用 - ss,使用
String#indexOf
获取破折号的下一个位置(或您需要的 w/e 字符(。 - 使用该位置,检查其他
String
的位置是否有破折号(或您要查找的字符(。您可以使用String#charAt
方法来实现此目的。 - 如果字符匹配,请保持循环,直到获得索引 -1(这意味着该字符不再在 ss 中(。
- 检查另一个字符串是否包含最后一个有效索引中的字符。如果没有更多,则两个字符串具有相同数量的短划线。没有别的。
在此解决方案中,无需使用额外的阵列来检查位置。
试试这个:
package samedashes;
import java.io.IOException;import java.util.Scanner;
公共类 SameDashes {
public static void main(String[] args) throws IOException {
sameDash();
}
public static void sameDash() {
String s1;
String s2;
char dash = '-';
float cnt = 0;
float s1dash = 0;
float s2dash = 0;
float totaldash1 = 0;
int minlength=0;
Scanner in = new Scanner(System.in);
System.out.print("Enter a string->");
s1 = in.nextLine();
System.out.print("Enter a string->");
s2 = in.nextLine();
if(s1.length()<s2.length()){
minlength=s1.length();
}else{
minlength=s2.length();
}
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) == dash) {
s1dash++;
}
}
for (int i = 0; i < s2.length(); i++) {
if (s2.charAt(i) == dash) {
s2dash++;
}
}
System.out.println("String1 dashes->" + s1dash);
System.out.println("String2 dashes->" + s2dash);
totaldash1 = s1dash + s2dash;
if (totaldash1 % 2 == 0 && s1.contains("-") && s2.contains("-")) {
for (int i = 0; i < minlength; i++) {
if (s1.charAt(i) == dash && s2.charAt(i) == dash) {
cnt++;
}
}
if (cnt >=1) {
System.out.println("true");
} else {
System.out.println("false");
}
} else {
System.out.println("false");
}
}
}