【问题标题】:How to extract a string between '@' and '.'如何提取'@'和'.'之间的字符串
【发布时间】:2022-01-27 07:09:29
【问题描述】:

我想在两个字符“@”和第一个“.”之间提取一个字符串。我刚刚尝试了代码,但我的代码不合适并得到不同的输出

//code 
    static String method(String s){ 
       String result=s.substring(s.lastIndexOf("@"));
       int index = result.indexOf("."); 
       String finalResult= result.substring(0,index);
    return finalResult;//return 
    }


eg:abc@gmail.com
my output:@gmail
Expected output: gmail
From input gmail is identifies as a string between '@' and the first '.' after it.
But i am getting @ in my output which is different from expected output. Help me out.

【问题讨论】:

  • 使用如下内容:String stringWithoutAt = myString.substring(0) if(stringWithoutAt.charAt(0)=="@"){ return stringWithoutAt.substring(1); }。此代码仅检查字符串的第一个字符是否为“@”,如果是,则返回没有第一个字符“@”的字符串,因此添加其他检查。我学会了如何使用来自this 的子字符串并使用来自this.charAt() 获取特定字符。

标签: java


【解决方案1】:

根据 Javadocs:

返回一个字符串,它是该字符串的子字符串。子串 从指定索引处的字符开始并延伸到 这个字符串的结尾。

例子:

"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" //(an empty string because there are no more characters after the 9th, i.e., there's no 10th character in "emptiness"; "emptiness" is a 9-letter word)

如果你调试你的代码,你会看到

System.out.println("abc@gmail.com".lastIndexOf("@"));

产生3

【讨论】:

    【解决方案2】:

    正如 Scary Wombat 所述,substring(position) 包含在内,因此 s.substring(s.lastIndexOf("@")); 将返回包含 '@' 字符的子字符串。

    需要额外注意的是,在许多边缘情况下您的代码会失败,例如null 字符串、不包含'@' 的字符串等。

    通过测试查看尝试捕获所有边缘情况的建议代码

    @Test
    public void testGetSubString(){
        final String constant = "gmail";
    
        final String input1 = "test@gmail.com";
        final String input2 = "t.est@gmail.com";
        final String input3 = "test@@gmail.com";
        final String input4ShouldBeNull = "test@gmailcom";
        final String input5ShouldBeNull = "test@.gmailcom";
        final String input6ShouldBeNull = "";
        final String input7ShouldBeNull = null;
        final String input8ShouldBeNull = "gmail.com";
    
        assertEquals(constant, getSubString(input1));
        assertEquals(constant, getSubString(input2));
        assertEquals(constant, getSubString(input3));
        assertNull(constant, getSubString(input4ShouldBeNull));
        assertNull(constant, getSubString(input5ShouldBeNull));
        assertNull(constant, getSubString(input6ShouldBeNull));
        assertNull(constant, getSubString(input7ShouldBeNull));
        assertNull(constant, getSubString(input8ShouldBeNull));
    
    }
    
    public String getSubString(final String input) {
        if(input == null) {
            return null;
        }
    
        final int indexOfAt = input.lastIndexOf('@');
        if(input.isEmpty() || indexOfAt < 0 || indexOfAt >= input.length()-2) {
            return null;
        }
    
        String suffix = input.substring(indexOfAt + 1);
    
        final int indexOfDot = suffix.indexOf('.');
        if(indexOfDot < 1) {
            return null;
        }
    
        return suffix.substring(0, indexOfDot);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2021-11-26
      • 2012-12-18
      相关资源
      最近更新 更多