Java 代码示例,用于确定路径中包含的层级数量, 并返回第N层的名字

这篇文章介绍了两个Java方法,一个用于计算给定路径中的层级数量,另一个根据层级获取对应层级的文件名,同时处理了路径中的协议分隔符。
摘要由CSDN通过智能技术生成

Java 代码示例,用于确定路径中包含的层级数量, 并返回第N层的名字


    /**
     *
     * 获取路径包含的层级数量
     * 通过正则表达式[\\\\/]将路径分割成不同的部分,然后通过数组长度减去文件名的部分,就可以得到路径包含的层级数量
     * @param path
     * @return
     */
    public static int checkFileLevel(String path) {
        if (StringUtils.isBlank(path)) {
            return 0;
        }
        String[] pathParts = removeProtocolDelimiter(path).split("[\\\\/]");

        int levels = pathParts.length - 1; // 减去文件名部分
//        System.out.println(path + " 有 "+levels+" 级路径");
        return levels;

    }

    /**
     * 根据 层级数量 获取对应名称
     * @param path
     * @param targetLevel
     * @return
     */
    public static String getTargetFileLevelName(String path, int targetLevel) {
        if (StringUtils.isBlank(path) || targetLevel <= 0) {
            return "";
        }
        String[] pathParts = removeProtocolDelimiter(path).split("[\\\\/]");

        // 确定路径中包含的层级数量
        int totalLevels = pathParts.length;

        int index = targetLevel >= 1 ? targetLevel : 0; // 第一层对应下标0开始

        if (index <= totalLevels) {
            // 返回第N层的名字
            String targetName = pathParts[index];
//            System.out.println("第" + targetLevel + "层的名字为: " + targetName);
            return targetName;
        } else {
//            System.out.println("路径层级不足,无法获取第" + targetLevel + "层的名字");
            return "";
        }
    }

    /**
     * 通过检查字符串中是否包含 :// 或 :\\ ,如果包含则使用正则表达式进行匹配和替换,移除这些协议分隔符
     * @param filePath
     * @return
     */
    public static String removeProtocolDelimiter(String filePath) {
        // 匹配://或:\\
        Pattern pattern = Pattern.compile("://|:\\\\");
        Matcher matcher = pattern.matcher(filePath);

        // 将匹配到的分隔符替换为空字符串
        String processedPath = matcher.replaceAll("");

        return processedPath;
    }

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用SAX解析器按节点层级读取XML文件的Java代码示例: 首先,您需要导入SAX解析器: ```java import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; ``` 然后,您需要定义一个继承自DefaultHandler类的处理程序,该处理程序将在解析XML文件时被调用: ```java public class NodeHandler extends DefaultHandler { private String current_node; private int current_level = 0; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { current_node = qName; current_level++; System.out.println(String.format("%" + current_level + "s", "") + qName); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { current_level--; } @Override public void characters(char[] ch, int start, int length) throws SAXException { String content = new String(ch, start, length).trim(); if (!content.isEmpty()) { System.out.println(String.format("%" + (current_level + 1) + "s", "") + content); } } } ``` 在这个处理程序,我们重写了三个方法:startElement、endElement和characters。这些方法在解析XML文件时被调用,以处理XML文件的节点。 在startElement方法,我们获取当前节点的名称,并将当前节点的层级设置为当前层级加一。然后,我们打印当前节点的名称,并在其前面添加与其层级相对应的空格。 在endElement方法,我们将当前层级减一。 在characters方法,我们获取当前节点的内容,并将其打印。我们还将其前面添加与其层级相对应的空格。 最后,您需要创建一个SAX解析器对象,并将处理程序分配给它。然后,您可以使用parse方法解析XML文件: ```java public static void main(String[] args) { try { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); SAXParser saxParser = saxParserFactory.newSAXParser(); NodeHandler handler = new NodeHandler(); saxParser.parse(new File("example.xml"), handler); } catch (Exception e) { e.printStackTrace(); } } ``` 在这里,我们创建了一个SAX解析器对象,并将NodeHandler处理程序分配给它。然后,我们使用parse方法解析XML文件。 请注意,您需要将example.xml替换为您要读取的实际XML文件的路径。 希望这可以帮助您按节点层级读取XML文件!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值