【问题标题】:Iterate on the characters in a string in Java without using any library function在不使用任何库函数的情况下迭代 Java 中的字符串中的字符
【发布时间】:2016-04-20 13:56:18
【问题描述】:

我想找出给定字符串 (a) 中最后一个单词的长度。单词被定义为没有空格('')的字符序列。条件是不要使用任何库函数来执行此操作。我知道它在 C++ 中是可能的。它也可以用Java完成吗? 我使用以下方法做到了:

for(char c:a.toCharArray()) //this is not correct though. I need one without using an inbuilt method(considering its possible)

有没有不使用库函数的方法?

编辑:

这是 C++ 中的解决方案。请注意,它在任何时候都不使用库函数,甚至 strlen()

class Solution {
public:
    int lengthOfLastWord(const string &s) {
        int len = 0;
        while (*s) {
            if (*s != ' ') {
                len++;
                s++;
                continue;
            }
            s++;
            if (*s && *s != ' ') len = 0;
        }
        return len;

    }};

【问题讨论】:

  • 库函数是什么意思?如果你可以使用toCharArray(),你可以使用String.split()吗?
  • “不使用任何库函数”是什么意思?
  • 如果您希望能够找到其中的最后一个空格,您将不得不使用某种库函数来访问字符串的各个字符。
  • 任何内置方法是什么?因为要操作字符串,您必须使用字符串方法。解决它的唯一方法是欺骗并使用反射来访问字符串的私有内部状态。但这将使用除 String 之外的许多其他类的方法。这个练习毫无意义。
  • 没有。指针在 java 中不是一个有效的概念。至少不像 C++ 那样。

标签: java string iteration


【解决方案1】:

您的 C++ 代码无效:您不能对引用进行指针运算。您可以将方法签名类型更改为:

int lengthOfLastWord(const char* s) {

然后它会编译并且看起来可以正常工作(前提是数组以空值结尾)。

因此,Java 中大致类似的代码将使用以零结尾的 byte[]

int longestWord(byte[] cs) {
  int len = 0;
  for (int i = 0; cs[i] != 0; i++) {
    // ...
  }
  return len;
}

【讨论】:

  • 是的。你说的对。我没有专注于 C++ 代码。它是在我解决问题的网站上给出的。
【解决方案2】:

解决方案 1:

for (int i = 0, n = a.length(); i < n; i++) {
    char c = a.charAt(i);
}

解决方案 2:

char[] chars = a.toCharArray();
for (int i = 0, n = chars.length; i < n; i++) {
    char c = chars[i];
}

【讨论】:

    【解决方案3】:

    这是一种方法:

    String msg = "Hello everybody I'm Here";
    String lastWord = msg.split(" ")[msg.split(" ").length-1];
    
    System.out.println(lastWord);// "Here"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2015-07-18
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      相关资源
      最近更新 更多