【问题标题】:Getting last few characters from a string从字符串中获取最后几个字符
【发布时间】:2014-06-03 09:55:05
【问题描述】:

我有一个包含 n 个字符的 java 字符串。

如何从该字符串中提取 LAST 几个字符?

我在网上找到了这段代码,提取了前几个,但我看不懂,所以无法修改。

谁能帮我解决这个问题?

String upToNCharacters = s.substring(0, Math.min(s.length(), n));

【问题讨论】:

  • 第二个参数减去 最后几个字符 长度应该是 substring() 的唯一参数,我猜!顺便说一句,n 是什么?
  • 我最后几个字符是什么意思?
  • 使用字符串 upToNCharacters = s.substring(Math.min(s.length(), n),s.length());
  • 在c#中但是逻辑是一样的:stackoverflow.com/questions/6413572/…
  • 最后几个字符表示多少。您至少应该知道要从哪里开始搜索的索引

标签: java


【解决方案1】:

试试,

String upToNCharacters = s.substring(s.length()-lastCharNumber);

【讨论】:

    【解决方案2】:

    那段代码的作用与你想要的完全相反。现在让我们看看为什么以及如何修改它。

    快速解决方案

    你可以修改如下代码来做你想做的事:

     String lastNchars = s.substring( Math.max(0, s.length()-n));
    

    说明

    根据official documentation,Java的String类有一个特殊的方法叫做substring()。 该方法的签名如下(带重载):

     public String substring(int beginIndex, int endIndex))
     public String substring(int beginIndex)
    

    第一个方法接受2个参数作为输入:

    1. beginIndex:子字符串的开始索引,包含
    2. endIndex: 子串的结束索引,独占

    第二次重载会自动将endIndex视为字符串的长度,从而返回"the last part"

    这两个方法都根据刚才描述的输入参数返回一个new String Object 实例。

    如何从字符串中提取正确的子字符串?提示是按原样考虑字符串:一个字符数组。因此,如果您有字符串Hello world,您可以在逻辑上将其视为:

    [H][e][l][l][o][ ][w][o][r][l][d]
    [0]...............[6]......[9][10]
    

    如果您选择仅提取字符串world,您可以调用substring 方法,给出正确的“数组”索引(记住endIndex 是唯一的!):

     String s = "Hello world";
     s.substring(6,11);
    

    在您提供的代码 sn-p 中,您给出了一个特殊的 endIndex:

     Math.min(s.length(), n);
    

    考虑到字符串的长度,这恰好取决于第 n 个字符索引(以避免超出范围的条件)。

    我们在这个答案的最开始所做的只是调用该方法并为其提供子字符串的开始索引,并考虑到如果您选择错误的索引可能会出现溢出情况。

    请注意,任何String 对象实例都可以利用此方法,请看this 示例,例如:

     System.out.println("abc");
     String cde = "cde";
     System.out.println("abc" + cde);
     String c = "abc".substring(2,3);
     String d = cde.substring(1, 2);
    

    如您所见,即使"abc" 当然也有substring 方法!

    【讨论】:

      【解决方案3】:

      看看substring documentation,基本上它的作用是,它返回调用它的字符串的子字符串,其中子字符串来自第一个参数指定的索引,结束于第二个参数。

      因此,要获取最后几个字符,请将开始索引和结束索引修改为您需要的值。这个方法还有另一个版本,它只接受一个参数,只是开始索引,这可能对你有用。

      【讨论】:

        【解决方案4】:
        String lastNchars = s.substring(s.length()-n);
        

        【讨论】:

          【解决方案5】:

          其中一个 String.substring() 重载采用一个参数 - 起始索引的索引。由此,您可以轻松实现您的功能:

          String lastFew(String s, int number) {
              if (number > s.length()) {
                  throw new IllegalArgumentException("The string is too short!");
              } else return s.substring(s.length()-number);
           }
          

          【讨论】:

            猜你喜欢
            • 2017-09-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-17
            • 1970-01-01
            • 2011-03-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多