JAVA字符串获取索引问题,为啥不能正确返回索引而是返回-1,代码如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA字符串获取索引问题,为啥不能正确返回索引而是返回-1,代码如下相关的知识,希望对你有一定的参考价值。

String dstr="HELLO!"
int index=dstr.lastIndexOf('L',1);
System.out.println("字符L在cstr指定索引:1处开始最后一次出现在索引:"+index);
index=dstr.lastIndexOf("LL",1);
System.out.println("字符ING在cstr中指定索引:1处开始最后一次出现在索引:"+index);

字符:H E L L O!
位置:0 1 2 3 4 5
lastIndexOf()是从后往前找,lastIndexOf('L',1)表示从 E 往前找,当然找不到了,
你把 lastIndexOf('L',2或3或4或5)就能找到了。
参考技术A 看jdk说明
* Returns the index within this string of the last occurrence of
* the specified character, searching backward starting at the
* specified index.

searching backward starting at the specified index.

他是倒着找,当然找不到了。
参考技术B 对。此方法是反向搜索的。
从1开始搜索的话,只能找到HE

调用newthread后如何获取线程索引?

【中文标题】调用newthread后如何获取线程索引?【英文标题】:How do I get the thread index after calling newthread? 【发布时间】:2021-08-23 01:03:34 【问题描述】:

在 JNLUA 中,newThread() 是 Java 中的 void 函数,但我不太了解实现该函数的 java 端的 C 代码。另外,有人能解释一下为什么原作者会返回索引/指针吗?

【问题讨论】:

Thread#newThread(Runnable) 返回 Thread,而不是 void。请澄清您的问题。 【参考方案1】:

newThread 将新线程推入 Lua 堆栈。无需返回值。通过指针值连接将很难确保安全(我猜无论如何风格都很差),并且索引很容易获得而不返回它(例如通过getTop或简单地通过跟踪堆栈大小或使用负索引) .对于将值压入堆栈的 API 的所有部分,这或多或少是相同的。

请注意,JNLUA 的 newThread 与 Lua 的 lua_newthread 略有不同; JNLUA 中的线程不太通用,更倾向于像 Lua 协程(当然也是 Lua 线程)一样使用——newThread 从堆栈顶部获取值并将其用作“启动函数” " 用于协程(将在第一次为线程调用resume 时调用)。

我不会推测作者决定以这种方式暴露线程;返回LuaState(和/或公开lua_tothread)也可能是实现更接近原始Lua API的一种合理方式。

这是实现的核心:

static int newthread_protected (lua_State *L) 
    lua_State *T;
    
    T = lua_newthread(L);
    lua_insert(L, 1);
    lua_xmove(L, T, 1);
    return 1;

这是在受保护的调用中完成的,因为lua_newthread 可以抛出异常(如果内存不足)。唯一的参数(因此最初在堆栈上的唯一内容)是索引 1 处的启动函数。lua_newthread 将新线程对象推送到索引 2 处的堆栈。然后lua_insert 将反转新线程的顺序object 和 start 函数,lua_xmove 将 start 函数传递给新线程,然后返回新线程(将其留在调用者堆栈的顶部)。

在 Lua 中,堆栈中已经有 start 函数的新线程可以被 lua_resume 等同于已产生的线程,所以这基本上就是 JNLUA 所做的——它的 resume 可以用来启动具有先前提供的函数的线程。

【讨论】:

以上是关于JAVA字符串获取索引问题,为啥不能正确返回索引而是返回-1,代码如下的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Stack 使用基于 1 的索引而不是 Java 中的 Array 中的基于 0 的索引?

为啥 R 不能在一组空索引上正确删除元素?

为啥我不能索引mysql返回的数组? [复制]

为啥 MongoDB skip() 不使用索引?

为啥不能用索引列表对列表进行索引?

为啥 min_element() 返回最小元素的索引,而不是迭代器?