【问题标题】:Unable to find the end character of a string in Java无法在 Java 中找到字符串的结束字符
【发布时间】:2021-01-08 13:30:23
【问题描述】:

尝试在不使用长度方法的情况下查找字符串的长度...使用“charAt()”函数..请让我们知道字符串的最后一个字符是什么..尝试使用 ' 和 null 和 '\0' 。 .但仍然无法找到结束字符..

str=”test this string”;
int i=0;
char p=str.charAt(i);//’\u00A00′;
while(p!=’\0’){

    p=str.charAt(i);++i;

}
System.out.println("Length of string : "+str+" is "+i);

【问题讨论】:

  • 你为什么要这样做?您应该使用length 方法来查找字符串的长度。
  • java 中的字符串不是 C 字符串。它们不是以 null 结尾的字符序列。
  • String#length 定义字符串的长度。 Java 不是 C,也不应该是。我假设您是一名 c 程序员,并且正在尝试将您的小村庄的规则应用于 Java。请不要那样做。 Java 和 C 尽管表面上相似,但却是截然不同的村庄。
  • 我这样做是因为它是面试问题之一......我发现我们可以在不使用“length”方法的情况下找到字符串的长度......使用 lastIndexOf 和 toCharArray 方法。 .. 所以只是想知道我们是否也可以使用 CharAt 来做到这一点 ....想知道如何获得字符串字符的结尾

标签: java string character


【解决方案1】:

在字符串的某些(通常在 C 中)实现中,字符串的“长度”通过标记字符进行跟踪,通常是:“\0”。合同是:

  • 实际字符“\0”不能在字符串中。
  • '\0' 字符是终止符;它本身不是字符串的一部分并表示结束。

这根本不是 java 的工作原理

还有其他编码字符串长度的方法。例如,首先存储字符串的长度,然后存储那么多字节。以字节为单位,想象这是在内存中:

many bytes ... 0x00 0x00 0x00 0x05 0x48 0x65 0x6C 0x6C 0x6F ... many more bytes

然后,给定一个指向第一个 0x00 的指针,代码可以计算出它是 "Hello"。您有一种假设的存储字符串的方法,效果很好。但是,扫描“结尾 0x00”是行不通的,因为这种存储字符串的特殊方式没有。

以上内容接近于 java 的工作方式。然而,更复杂的是,java 是 java.lang. java 不做指针不可能获得指向该长度字段的内存指针。

结论:你想做什么?不可能。找不到\0,也无法读取包含长度的内存。它被抽象掉了;如果你想要长度,你调用stringInstance.length()。故事结束。

当然,有创造性的、愚蠢的、完全学术的方式来做到这一点。例如:

public int getStringLengthInAStupidWay(String in) {
  int i = -1;
  try {
    while (true) input.charAt(++i);
  } catch (IndexOutOfBoundsException inevitable) {}
  return i;
}

你甚至可以用一些花哨的数学来计算 O(logn)。不过,我完全不知道这会有什么意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-22
    • 2012-10-07
    • 2015-10-03
    • 2019-03-06
    • 2014-02-04
    • 1970-01-01
    相关资源
    最近更新 更多