确定字符串是否为十六进制数字的递归方法-Java

|| 这是一个作业问题,我有点麻烦。 编写一个确定字符串是否为十六进制数字的递归方法。 为您的方法编写javadocs。 如果每个字符均为一个,则字符串为十六进制数字 0或1或2或3或4或5或6或7或8或9 或a或A或b或B或c或C或d或D或e或E或f或f。 目前,我能看到的所有测试结果是,如果字符串0处的字符是他提供给我的这些值之一,则该部分为十六进制。 有什么提示或建议可以帮助我吗? 到目前为止,这就是我的意思:
public boolean isHex(String string){


    if (string.charAt(0)==//what goes here?){
        //call isHex again on s.substring(1)
    }else return false;
    }
`     
已邀请:
由于这是家庭作业,因此我只给出一些提示而不是代码: 编写一个方法,该方法在满足条件时始终测试String的第一个字符。如果不是,则返回false,如果是,则使用相同的String再次调用该方法,但是第一个字符丢失。如果只剩下1个字符,而且还是十六进制字符,则返回true。 伪代码:
public boolean isHex(String testString) {


   If String has 0 characters -> return true;

   Else

      If first character is a hex character -> call isHex with the remaining characters

      Else if the first character is not a hex character -> return false;

}
    
如果您要寻找一个好的十六进制数字方法:
boolean isHexDigit(char c) {
    return Character.isDigit(c) || (Character.toUpperCase(c) >= \'A\' && Character.toUpperCase(c) <= \'F\');
}
提示或建议,根据要求: 所有递归方法都使用不同的输入(嗯,希望是不同的输入!) 所有递归方法都有停止条件。 您的方法签名应如下所示
boolean isHexString(String s) {
    // base case here - an if condition

    // logic and recursion - a return value

}
另外,请不要忘记十六进制字符串可以以\“ 0x \”开头。这可能(很难)完成,所以我首先要使常规函数起作用。如果以后再解决,请记住不要通过0xABCD0x123。 :-) 关于子字符串:直接来自String类源:
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
    throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > count) {
    throw new StringIndexOutOfBoundsException(endIndex);
}
if (beginIndex > endIndex) {
    throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
}
return ((beginIndex == 0) && (endIndex == count)) ? this :
    new String(offset + beginIndex, endIndex - beginIndex, value);
}
offset是类型为“ 5”的成员变量 value是类型为“ 6”的成员变量 它调用的构造函数是
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
显然,它是一个O(1)方法,调用了O(1)构造函数。之所以可以这样做,是因为String是不可变的。您不能更改字符串的值,只能创建一个新的字符串。 (由于它们是无关紧要的解决方案,因此省去了反射和ѭ8)之类的东西!)由于无法更改,因此您也不必担心其他一些Thread会使其混乱,因此可以像乡村自行车一样四处走动。     
当递归地解决问题时,通常需要解决一小部分(“基本情况”),然后对其余部分进行递归。 您已经确定了基本情况-检查单个字符是否为十六进制。 现在,您需要“递归其余部分”。 这是一些用于反转字符串的伪代码(类似于Python的代码)-希望您会看到类似的方法可以如何应用于您的问题(实际上是所有递归问题)
def ReverseString(str):
    # base case (simple)
    if len(str) <= 1:
        return str

    # recurse on the rest...
    return last_char(str) + ReverseString(all_but_last_char(str))
    
听起来您应该递归地迭代字符串中的字符,并通过递归调用返回当前字符是否在
[0-9A-Fa-f]
中的布尔值AND。     
您已经收到许多有用的答案。如果您想进一步训练递归技能(以及一般的Java技能),我建议您访问Coding Bat。您会发现很多练习以及自动化测试。     

要回复问题请先登录注册