我需要帮助编写一种检查数字和文本是否连续的方法。如果像输入的 deFgh 或 456789 这样的输入,它需要返回一个布尔值 true,而对于其他不连续的输入,它需要返回 false。我不明白如何使循环适用于 xyZaBcD 和 890123 或 cbazyx 等情况
问问题
788 次
4 回答
1
这可以以最简单的方式实现:
public class Check {
private static boolean checkConsecutive(String str) {
str = str.toLowerCase();
if (str.length() == 1) return true;
for (int i = 1; i < str.length(); i++) {
String first = str.substring(i, i+1);
String beforeFirst = str.substring(i-1, i);
if (beforeFirst.compareTo(first) > 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
Check obj = new Check();
System.out.printf("abcdef is: %s%n", obj.checkConsecutive("abcdef"));
System.out.printf("12345 is: %s%n", obj.checkConsecutive("12345"));
System.out.printf("54321 is: %s%n", obj.checkConsecutive("54321"));
System.out.printf("fedcba is: %s%n", obj.checkConsecutive("fedcba"));
}
}
输出将是下一个:
abcdef is: true
12345 is: true
54321 is: false
fedcba is: false
这一行str.substring(i, i+1)
只返回一个字母,我们可以compareTo()
从 String 类中使用它自己比较连续。
于 2013-10-18T21:49:51.260 回答
1
试试这个代码:
public static boolean isConsecutive(final String s) throws IllegalArgumentException
{
if (null == s) throw new IllegalArgumentException();
if (s.length() <= 1) return true;
final String lc = s.toLowerCase();
char c = lc.charAt(0);
for (int cc=1; cc<lc.length(); cc++)
if ( (c+1) != lc.charAt(cc) )
return false;
else
c++;
return true;
}
public static void main(String[] args)
{
try
{
System.out.println(isConsecutive("456789"));
System.out.println(isConsecutive("deFgh"));
System.out.println(isConsecutive("xyZaBcD"));
System.out.println(isConsecutive("890123"));
}
catch(final Exception e)
{
e.printStackTrace();
}
}
但我真的建议你不要给老师看,因为它会有更多的问题,只作为你自己代码的方向
于 2013-10-18T21:05:45.527 回答
0
您可以将 (int) 转换为循环中的字符。如果整数介于 48 和 57 之间,则表示该字符是数字。
有关从 char 进行强制转换给出的整数,请参见 ASCII 表。
于 2013-10-18T21:08:33.070 回答
0
只需遍历字符串并检查字符代码序列。如果需要,请使用 toLowerCase() 方法。
于 2013-10-18T20:45:02.357 回答