【问题标题】:How can I get a character at a given index in Perl?如何在 Perl 的给定索引处获取字符?
【发布时间】:2010-10-18 16:59:09
【问题描述】:

如果我有一个 Perl 字符串:

$str = "Hello";

如何在给定索引处获取类似于 charAt(index) 的字符?

【问题讨论】:

    标签: perl string


    【解决方案1】:

    使用长度为 1 的substr

    $nth = substr($string, n-1, 1);
    

    还可以查找 perlmonks 以获取其他解决方案。

    【讨论】:

      【解决方案2】:
      $char = substr( $mainstring, $i , 1 );
      

      是一种方法,可能是最清晰的。

      如果您想要的是 numeric 值并且您打算这样做很多:

      unpack("W*","hello")
      

      返回一个 Char 值数组:

      print join ",", unpack("W*","hello")  ; 
      #  104,101,108,108,111
      

      对于您可能想要使用的正确的 Unicode/Utf8 内容

      use utf8;
      unpack("U*","hello\0ƀ\n") 
      # 104,101,108,108,111,0,384,10
      

      【讨论】:

      • 或者只是ord(substr($mainstring, $i, 1))
      • 问题是,通常当你想要一个字符的值时,你想要所有字符的值,并且循环通过 ord(substr()) 既效率低又难比 unpack 变体更易阅读,更难调试。
      【解决方案3】:

      其他 substr() 答案的推论是您也可以使用它来设置索引处的值。它支持这个作为左值或额外的参数。它也和 splice 非常相似,也是一样的东西,只不过是针对数组。

      $string = "hello";
      substr($string, 2, 2) = "this works?";
      substr($string, 2, 2, "same thing basically");
      @a = qw(s t r i n g s a n d t h i n g s);
      @cut_out = splice(@a, 2, 2);
      @cut_out = splice(@a, 2, 2, @replacement);
      

      【讨论】:

      • 有人应该指出substr( x, y, z ) = foo 等同于substr( x, y, z, foo ),但建议使用后一种表示法,因为前者经常让新手感到困惑。
      • 你刚刚做到了!我想我在“基本相同”这句话中也做了。我会假设看这个例子的新手会打开 substr 的 pod 页面并注意到 LVALUE 魔法并使用四个参数形式,因为 LVALUE 形式很奇怪而且很吓人——它在 pod 上这么说。可能是我太相信新人了?
      【解决方案4】:

      要获取第 i 个索引处的字符,请使用 substr。获取第二个索引字符,例如:

      $str="Perl";
      print substr($str,2,1). 
      

      这将给出输出r

      【讨论】:

      • 对不起,代码将是 substr($str,2,1);因此,基本上为了获取字符串中的第 n 个字符,格式将是 substr(string,index,1)。我希望这会有所帮助。
      猜你喜欢
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2023-02-16
      相关资源
      最近更新 更多