0

我必须用 Java 编写一个程序来比较两个字符串的破折号。仅当每个字符串在字符串中的相同位置具有相同数量的破折号时,测试才会返回 true。

例子:

比较以下两个字符串

" String string1 = "二二十九"
String string2 = "十四十五,我饿了。"

符合上述条件将返回 true。一根绳子是否比另一根长并不重要。

任何援助将不胜感激!

我尝试过:
- 将字符串转换为 char 数组,然后比较索引
- 对每个字符串使用 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");
        }
    }
}
4

5 回答 5

4

由于我怀疑这是家庭作业,因此我将概述一个解决方案。

  • 使用该方法遍历string1indexOf,得到一个代表破折号位置的s ListInteger
  • 以相同的方式遍历string2。(您可以调用一个通用方法两次。一次使用string1,一次使用string2。)
  • 比较你List的 s,看看它们是否相同size()
  • 如果它们的大小相同,则遍历两个列表并查看位置是否相同。
于 2012-08-20T19:12:26.570 回答
1

超级简单的使用String.split

  1. 在两个字符串的每一端都用一个字符填充(即str = " " + str + " ")。
  2. 调用.split("-")两个字符串并存储结果数组。
  3. 如果数组的长度不同,则字符串不匹配。
  4. 否则,比较每个数组中对应字符串的长度,如果任何一对的长度不匹配,则字符串不匹配。除非它是最后一对字符串——那么它们可以是不同的长度并且它们仍然匹配(即忽略最后一对字符串——你不需要比较数组中最后一个索引处的字符串)。
  5. 否则,两个字符串匹配。
于 2012-08-20T20:00:59.677 回答
0

解决这个问题的一个简单算法是使用indexOf()andcharAt()并循环遍历字符串的一个实例-

  1. 从 开始索引偏移量0
  2. 从给定的偏移量中获取 a -in的下一个位置。string1
  3. 检查string2找到的位置是否包含字符,如果是,检查它是否为-. 如果不是-,则检查失败。
  4. 将 index-offset 设置为下一个-instring1并重复 #2。
  5. 在 中找到所有-'后string1,检查是否在字符串中比所包含的更远的点string2包含 a 。如果是,则检查失败。如果没有,则检查通过!-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);
于 2012-08-20T19:05:38.970 回答
0

我将为这个问题放置一个算法:

  • 检查哪个String是最短的:s1 或 s2。我们称短字符串为 ss。
  • 使用 ss,用于String#indexOf获取破折号的下一个位置(或您需要的 w/e 字符)。
  • 使用该位置,检查另一个位置String是否有破折号(或您要查找的字符)。您可以String#charAt为此目的使用方法。
  • 如果字符匹配,保持循环直到你得到索引 -1(这意味着字符不再在 ss 中)。
  • 检查另一个字符串是否包含最后一个有效索引中的字符。如果没有更多,则两个字符串具有相同数量的破折号。没有,否则。

在这个解决方案中,不需要使用额外的数组来检查位置。

于 2012-08-20T19:36:02.000 回答
0

试试这个:

package samedashes;

导入 java.io.IOException;导入 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");
    }
}

}

于 2015-11-24T16:38:41.757 回答