计算 2 个单独字符串内的短划线,如果每个字符串的相同位置有相同数量的短划线,则返回 true



我必须用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超级简单:

  1. 用两端一个字符填充两个字符串(即 str = " " + str + " " (。
  2. 对两个字符串调用.split("-")并存储生成的数组。
  3. 如果数组的长度不同,则字符串不匹配。
  4. 否则,比较每个数组中相应字符串的长度,如果任何对的长度不匹配,则字符串不匹配。除非它是最后一对字符串 - 那么它们可以是不同的长度并且它们仍然匹配(即忽略最后一对字符串 - 你不需要比较数组中最后一个索引处的字符串(。
  5. 否则,两个字符串匹配。
解决此问题

的简单算法是使用 indexOf()charAt() 并循环遍历字符串的 - 实例之一。

  1. 0 处开始索引偏移量。
  2. 从给定偏移量获取-的下一个位置string1
  3. 检查string2是否包含找到的位置的字符,如果是,请检查它是否是-。如果不是-,则检查失败。
  4. 将索引偏移量设置为 string1 中的下一个-,然后重复 #2。
  5. 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");
    }
}

}

最新更新