Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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_Groovy - Fatal编程技术网

Java 使用方法获取子字符串无效

Java 使用方法获取子字符串无效,java,groovy,Java,Groovy,我试图在我的程序中引入一个方法,它应该会产生一个子字符串。我写了下面的代码,但为什么不能工作呢 class testmethod { String FQDN = "TEST.domain.local" def sname = shortname(FQDN); println $sname def shortname(Longname) { shortname1 = Longname.substring(0, Longname.

我试图在我的程序中引入一个方法,它应该会产生一个子字符串。我写了下面的代码,但为什么不能工作呢

class testmethod {

   String FQDN = "TEST.domain.local"
   def sname = shortname(FQDN);
   println $sname

     def shortname(Longname)
        {
          shortname1 =  Longname.substring(0, Longname.indexOf('.'))
          return shortname1
        }
     }

首先,代码应该是(为了更好的可读性):-

def shortname(字符串Longname)
not
def shortname(Longname)

此外,
shortname1=Longname.substring(0,Longname.indexOf('.'))
在此
shortname1
中未定义

此外,您可以尝试:-

def shortname(String Longname)
        {
          String[] shortnameArr =  Longname.split("\\.");
          return shortnameArr[0];// will return TEST
        }

您在一段代码中混合了Groovy的脚本和类概念

只需删除类定义和$sign即可使用脚本方式:

   String FQDN = "TEST.domain.local"
   def sname = shortname(FQDN);
   println sname

     def shortname(Longname)
        {
          shortname1 =  Longname.substring(0, Longname.indexOf('.'))
          return shortname1
        }
或添加类初始化和局部变量声明以使用类方式:

class testmethod {
   String FQDN = "TEST.domain.local"
   def sname = shortname(FQDN);

     def shortname(Longname)
        {
          def shortname1 =  Longname.substring(0, Longname.indexOf('.'))
          return shortname1
        }
}

def tc = new testmethod()
println tc.sname

我是说
String Longname
,而不是
def sname
def shortname
@AnkitNigam
def shortname(Longname)
等于
def shortname(def Longname)
。将实际类定义为
String
而不是默认的
def
,这很好,一些将来阅读此代码的人会对此表示感谢,但这不是@rora所做的asked@IgorArtamonov,thanx用于澄清。顺便说一句,我用了你的FB-SpringSecurity。做得很好。@AnkitNigam感谢您使用它:)顺便说一句,更新后的答案看起来不错,我想最初的问题是因为未定义的
shortname1
,但问题中的代码非常混乱,很难说@rora是什么意思。刚从Groovy开始。来自perl/vbscript背景,没有JAVA经验@伊格拉塔莫诺夫-你是对的。这不是完整的代码。目前,我已经开始将VBScript代码迁移到Groovy,在这个脚本中,我有一个函数,通过使用该函数将FQDN更改为主机名。groovy的缺点是有很多方法可以做同样的事情。顺便说一句,我得到的错误是(Groovy控制台)是1个编译错误:第5行第4列的意外标记:println它是真实代码的一部分吗?还是仅仅是一个“伪代码”?它看起来不像是真实的东西,以这种形式很难回答,太多的语法错误确实是有趣的代码风格惯例