Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中找不到字符串的结束字符_Java_String_Character - Fatal编程技术网

在Java中找不到字符串的结束字符

在Java中找不到字符串的结束字符,java,string,character,Java,String,Character,尝试在不使用length方法的情况下查找字符串的长度…使用“charAt()”函数..请告知字符串的最后一个字符是什么..尝试使用“and 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 :

尝试在不使用length方法的情况下查找字符串的长度…使用“charAt()”函数..请告知字符串的最后一个字符是什么..尝试使用“and 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);
在字符串的某些(通常是C)实现中,字符串的“长度”是通过哨兵字符跟踪的,通常是:'\0'。合同是:

  • 字符串中不能包含实际字符“\0”
  • “\0”字符是终止符;它本身不是字符串的一部分,表示结束
这根本不是java的工作方式,不过

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

many bytes ... 0x00 0x00 0x00 0x05 0x48 0x65 0x6C 0x6C 0x6F ... many more bytes
然后,给定指向第一个0x00的指针,代码可以计算出这是
“Hello”
。您有一种假设的存储字符串的方法,这种方法非常有效。但是,扫描“结束0x00”是行不通的,因为这种存储字符串的特殊方式没有这种功能

以上内容接近java的工作原理。然而,更复杂的是,java就是javajava不做指针不可能获取指向该长度字段的内存指针

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

当然,有一些创造性的、愚蠢的、完全是学术性的方法可以做到这一点。例如:

public int getStringLengthInAStupidWay(String in) {
  int i = -1;
  try {
    while (true) input.charAt(++i);
  } catch (IndexOutOfBoundsException inevitable) {}
  return i;
}
你甚至可以用一些奇特的数学来做O(logn)。不过,我完全不知道这可能有什么意义。

在一些(通常是C)字符串实现中,字符串的“长度”是通过哨兵字符跟踪的,通常是:“\0”。合同是:

  • 字符串中不能包含实际字符“\0”
  • “\0”字符是终止符;它本身不是字符串的一部分,表示结束
这根本不是java的工作方式,不过

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

many bytes ... 0x00 0x00 0x00 0x05 0x48 0x65 0x6C 0x6C 0x6F ... many more bytes
然后,给定指向第一个0x00的指针,代码可以计算出这是
“Hello”
。您有一种假设的存储字符串的方法,这种方法非常有效。但是,扫描“结束0x00”是行不通的,因为这种存储字符串的特殊方式没有这种功能

以上内容接近java的工作原理。然而,更复杂的是,java就是javajava不做指针不可能获取指向该长度字段的内存指针

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

当然,有一些创造性的、愚蠢的、完全是学术性的方法可以做到这一点。例如:

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

你甚至可以用一些奇特的数学来做O(logn)。不过,我完全不知道这有什么可能。

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