检查第一个字符串是不是小于或等于第二个字符串中的相应字母

Posted

技术标签:

【中文标题】检查第一个字符串是不是小于或等于第二个字符串中的相应字母【英文标题】:Checking if the first string is smaller or equal than the corresponding letter in the second string检查第一个字符串是否小于或等于第二个字符串中的相应字母 【发布时间】:2016-06-09 02:27:05 【问题描述】:

我正在尝试获取两个字符串并比较它们的长度。如果它们的长度不相等,程序将简单地打印“Bye”,但是如果它们相等,我想检查第一个字符串中的每个字母是否小于或等于第二个字符串中的相应字母。如果这成立,它应该打印 TRUE 否则它应该打印 FALSE。

  import java.util.Scanner;
public class hw3_task2 


public static void main(String[] args) 
    Scanner in = new Scanner(System.in);
   System.out.printf("Enter the first string: ");
    String a = in.nextLine();
   System.out.printf("Enter the second string: ");
    String b = in.nextLine();

  char [] _a = a.toCharArray();
  char [] _b = b.toCharArray();

  if (a.length() == b.length());

boolean flag = true;
for(int i = 0; i < a.length(); i++)
      System.out.printf("TRUE\n");
      System.out.printf("Bye\n");

  if( _a[i] != _b[i])
    flag = false;
    System.out.printf("Bye\n");
  



【问题讨论】:

通过比较一个字母是否更小......你是什么意思? 您需要将字符串转换为字符数组,因此请考虑docs.oracle.com/javase/7/docs/api/java/lang/… 除此之外,将它们都放入 char 数组中并与 for 循环进行比较... 我相信这意味着 'a' 将小于 'b',如果它们被赋予像 a = 1 和 b = 2 这样的值。 char a = 'a'; char b = 'b'; if (a &lt; b) ??? 【参考方案1】:

您不能简单地使用String compareTo() 函数吗?它似乎完全符合您的需要:

String a = "cats";
String b = "cuts";
String result = "";
if(a.length() != b.length())
    result = "BYE";

else if (a.compareTo(b) <= 0)
    result = "TRUE";

else
    result = "FALSE";

System.out.println(result);

【讨论】:

哇,我完全忽略了这个答案,对不起。这实际上正是我所需要的,非常感谢。【参考方案2】:

是的,使用 length 方法的 for 循环。

您可以使用CharSequence#charAt 获取指定位置的字母。

String 实现了CharSequence,所以你可以做到a.charAt(i);

【讨论】:

我有点困惑!如何将每个单独的字母与相应的第二个字符串进行比较?如果我对它进行硬编码,那么它将被限制在我为多少个字母上,对吧? 此时的代码长度相同,因此您可以毫无问题地将 a.charAt(i) 与 b.charAt(i) 进行比较。 你是对的,避免硬编码。这通常是一个非常糟糕的做法。几乎总有一些方法可以让你的代码变得灵活,例如在这里使用 length()。 是的,先生,但它可以是任意数量的字母,对吧?这是我想太多了吗?就像我必须将每个字符串的第 50 个字母相互比较? 我不明白你的担忧。如果您使用循环,它会处理整个长度,无论是 2 还是 500 个字符。【参考方案3】:

您必须循环字符串中的各个字符

for (int x = 0; x < a.length(); x++) 

    if (a.charAt (x) > b.charAt (x)) 
        System.out.println ("First String is BIGGER");

        // maybe break now ?
    

【讨论】:

每次a 中的一个字符更大时,你都会有一个“第一个字符串更大”。这不是坏事,我只是没有那样读过这个问题,并且不确定你是否看到07 @R.Hull 因此我写了 // 也许现在就崩溃了【参考方案4】:

我喜欢 pyb 建议的 charAtSequence(),但我自己的第一直觉是 char 数组。我认为他们都将工作相同。我本来不想为你写完整的代码,但我希望这会有所帮助......

  char [] _a = a.toCharArray();  // note 1
   //do the same for the b string here...

  else if (a.length() == b.length());

    for(int i = 0; i < a.length; i++)  // note 2
      //compare each character here..
    
       System.out.printf("Bye");
  

如果您需要更多帮助或理解,这里有一些关于 toCharArray() 的好资源

java documentation on tocharArray()

beginner's guide to toCharArray()

注 1:这一行预留了一个 char[] 变量(一个字符数组):char[]_a

第二个par = a.toCharArray 使用String 类的方法,该方法将实例化字符串a 长度的char 数组 然后取出字符串a 的每个字母并将它们放入char[] 数组中..

所以....

  String a  = cat
  char[] _a = a.toCharArray();

产生一个数组字符

[c]

[a]

[t]

现在我们对字符串 b.... 执行相同的操作。

   String b  = cat
  char[] _b = b.toCharArray();

this(因为字符串是等价的)将产生等价的数组。但是您必须对此进行测试才能确定。

要测试这些数组的等价性,我们必须根据相应的索引测试每个索引...我们将使用 for 循环来测试

这个 for 循环,如上所示 [注 2] 被设置为运行与数组长度相同的旋转次数。 (我现在不知道如何表达这个我今晚用词不好,所以如果你能更好地表达,请这样做......)然后我们将在这里将每个索引与相应的索引进行比较......

    boolean flag = true;
    for(int i = 0; i < a.length; i++)  
    // ( or > or < or >= or <= ) however it is you wish to compare these
      if( _a[i] != _b[i])
        flag = false;
      
    

然后如果 flag == true,则打印出您的相应消息 else.. print other message...

对于这个答案..

    if( _a[i] != _b[i])
       flag = false;
       System.out.printf("Bye\n");
    

获取您的 System.out.print,并将其移到循环之外..

每次你的循环通过它时都会打印再见...

尝试一个打印标志和再见的语句...

【讨论】:

您能解释一下第一行的工作原理吗?我真的不熟悉语法。 (如果可以的话,我会支持你,但它不会让我给 cmets 打分。) ` char [] _a = a.toCharArray();` ? 是的,我不太确定它是如何工作的,我应该为 [] 填写变量吗?我是否对第二个字符串使用相同的语法? 我想是的!所以我们使用布尔值来决定它是否打印 TRUE 或 FALSE,它如何在 a > b 时将其标记为 FALSE? 而不是!= 使用_a[i] &gt; _b[i]

以上是关于检查第一个字符串是不是小于或等于第二个字符串中的相应字母的主要内容,如果未能解决你的问题,请参考以下文章

算法题-第K个小子串

流星模板,检查值是不是等于字符串

不输入第二个字符串[重复]

SWIFT 检查字符串是不是以某些东西开头,但第二个字符可以是任何东西

Discord.js 检查用户是不是具有第一个角色或第二个角色不起作用

mysql