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);
位置: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,代码如下的主要内容,如果未能解决你的问题,请参考以下文章