所以基本上,我需要找出一个字符串是以<link>
开头还是以[URL]
结尾。
现在我正在做:
[/URL]
根据cplusplus.com,“指向str2中指定的整个字符序列的str1中第一次出现的指针。”
这是否意味着我可以这样做?
const char *urlStart;
// ...
urlStart = strstr(message, "[URL]");
if (urlStart == NULL) {
urlStart = strstr(message, "[url]");
}
if (urlStart == NULL) {
return NULL;
}
初步测试似乎表明这不起作用。
完整的功能位于here。
答案 0 :(得分:3)
是的,假设Error Message:
Exception in Application constructor
Exception in thread "main" java.lang.RuntimeException: Unable to construct Application instance: class sample.Main
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java:182)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:819)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
Caused by: java.lang.NullPointerException
at sample.Main.<init>(Main.java:76)
... 10 more
以if (message != urlStart)
或message
开头,检查[URL]
将按预期工作。但是,如果[url]
以message
开头,那么由于大小写不匹配,[Url]
将找不到该字符串。
鉴于您要求字符串位于strstr
中的已知位置,message
函数对您没有太大作用。检查strstr
的前5个字符比较简单,就像这样
message
你可以像这样检查char *start = "[URL]";
for ( int i = 0; i < 5; i++ )
if ( toupper(message[i]) != start[i] )
return NULL;
[/URL]
您也可以使用非大小写敏感长度限制的字符串比较,但请注意,这些不是可移植的。我相信它在Windows上为length = strlen(message);
if ( length < 12 )
return NULL;
char *end = "[/URL]";
for ( int i = 0; i < 6; i++ )
if ( toupper(message[length-6+i]) != end[i] )
return NULL;
,在unix克隆上为strnicmp
。