当前位置: 首页 > 知识库问答 >
问题:

如何在第二个点java之后找到第一个字符

富建章
2023-03-14

你有什么想法,我怎么能得到字符串的第二个点后的第一个字符。

String str1 = "test.1231.asdasd.cccc.2.a.2";
String str2 = "aaa.1.22224.sadsada";

在第一种情况下,我应该得到a,在第二种情况下我应该得到2。我考虑用点分割字符串,并提取第三个元素的第一个字符。但这似乎很复杂,我认为还有更好的方法。

共有3个答案

广瑞
2023-03-14

不使用模式,您可以使用String类的subStringcharAtmethod来实现这一点

// You can return String instead of char
public static char returnSecondChar(String strParam) {
    String tmpSubString = "";
   // First check if . exists in the string.
    if (strParam.indexOf('.') != -1) {
        // If yes, then extract substring starting from .+1  
        tmpSubString = strParam.substring(strParam.indexOf('.') + 1);
        System.out.println(tmpSubString);

       // Check if second '.' exists
        if (tmpSubString.indexOf('.') != -1) {

            // If it exists, get the char at index of . + 1  
            return tmpSubString.charAt(tmpSubString.indexOf('.') + 1);
        }
    }
    // If 2 '.' don't exists in the string, return '-'. Here you can return any thing
    return '-';
}
司寇书
2023-03-14

通常regex在这里会做得很好。如果您正在寻找更具定制性的产品,请考虑以下实现:

private static int positionOf(String source, String target, int match) {
    if (match < 1) {
        return -1;
    }
    int result = -1;

    do {
        result = source.indexOf(target, result + target.length());
    } while (--match > 0 && result > 0);

    return result;
}

然后用以下方法进行测试:

字符串str1=“test..1231.asdasd.cccc..2.a.2.”系统输出。println(positionOf(str1,“.”,3))-

常小白
2023-03-14

这个的正则表达式怎么样?

Pattern p = Pattern.compile(".+?\\..+?\\.(\\w)");
Matcher m = p.matcher(str1);

if (m.find()) {
     System.out.println(m.group(1));
}

正则表达式说:以非贪婪的方式找到任何东西一次或多次(),必须跟着一个点(\\.),而不是以非贪婪的方式(.?)再找一次,后跟一个点(\\.)。匹配后,取第一组中的第一个单词字符 ((\\w))。

 类似资料:
  • 我有以下超文本标记语言: 我想提取包含给定文本的h2标记后面的第二个DIV。 正如您可能注意到的,在第一个和第二个div中,p标签不在同一位置。 要在第一个h2之后提取DIV,以下公式将起作用: 但是要提取第二个,用“布拉2”替换“布拉1”将不起作用,因为“p”标签位于其他地方,所以静态选择器将是: 我需要的是一个单一的选择器公式,在这个公式中,无论p块在哪里,改变文本都会使它工作 我试过几种方法

  • 我的程序有两个场景,,每个都有相应的控制器类。 我希望能够使用Stage的在我的秒控制器类上,在它使用Button的onAction事件和FXMLLoader加载到FirstController类之后。 这是我在秒控制器类上的代码片段: 基于我的第一个控制器类上的,其中的值是一个字符串。 然而,这会输出一个错误: 然后,在第一个控制器类加载第二个控制器类之后,如何在其上使用?

  • 我有一个列表[z”,“1”,“3”,“x”,“y”,“00”,“x”,“y”,“4”],在这种情况下,我需要得到字符串后的第一个

  • 我编写了如下代码,但它没有正确返回第一个重复出现的字母。 示例: 在单词中,重复出现的字母是、和。但是字母比字母和更早出现,但我的程序返回而不是。 根据手头的任务,我需要做什么才能使用两个for循环返回t?

  • 这将是我们第一次遇到 GLEW,GLEW 是OpenGL的扩展功能库。它能帮助你解决OpenGL不断扩展的问题。一旦你初始化它之后,它在你的系统上将查询所有可用的扩展功能,自动的加载它们并且通过一个单一的头文件提供简单的接口。 在这一节中,我们将第一次看见顶点缓冲区对象(VBOs)的使用。顾名思义,它们是被用来储存顶点数据的。加载顶点进入 GPU 最有效率的方法是 VBOs。它们是可以存储在显存中

  • 我尝试使用Firebase为Android提供推送通知。但我面临着非常奇怪的问题。当我在前台发送推送时,一切正常。当我在后台发送推送时(我只发送数据),一切都正常,直到我回到前台,然后回到后台。 当我的应用程序第二次转到后台时,不会调用我的FirebaseMessagingService。另外,请注意,我使用的是Android Emulator。代码: AndroidManifest。xml: 服