CSP2016-路径解析(Java 100分)

在这里插入图片描述
思路:
本思路借鉴了CSDN博主的想法
首先是采用堆栈的数据结构,来实现目录文件的回溯,通过进栈来深入路径,通过出栈来回溯上一层,然后正则化后的路径通过动态数组来进行反向,达到标准的正则化,主要是细节的处理,其中利用到了Java中的正则化表达式来实现/符号的等效!

import java.util.Scanner;
import java.util.Stack;
import java.util.Vector;

public class Main {
	public static void main(String argc[]) {
		
		Stack<String> paths=new Stack<String>();
		Vector<String>result=new Vector<String>();
		
		Scanner sc = new Scanner(System.in);
		int n=sc.nextInt();
		String npos=new String();
		npos=sc.next();
		String pos=new String();
		String pre=new String("..");
		String delimiter=new String("/");
		sc.nextLine();
		
		for(int i=0;i<n;i++) {
			String ans=new String();
			pos=sc.nextLine();
			pos=pos.replace("/{2,3}",delimiter);//然后用正则表达式去掉多余的/
			
			if(pos.length()==0) {
				System.out.println(npos);
				continue;
			}
			
			if(pos.charAt(0)!='/') {
				String temp[]=npos.split(delimiter);
				for(String s:temp) {
					if(s.length()==0) {
						continue;
					}
					paths.push(s);
				}
			}
			
			String temp_pos[]=pos.split(delimiter);
			for(String s:temp_pos) {
				if(s.length()==0) {
					continue;
				}
				if(!s.equals(pre)&&!s.equals(".")) { 
					paths.push(s);
				}
				else if(s.equals(pre)&&!paths.empty()) {
					paths.pop();
				}
			}
			while(!paths.empty()) {
				result.insertElementAt(paths.pop(), 0);
			}
			int len=result.size();
			if(len==0) {
				ans=delimiter;
			}
			for(int j=0;j<len;j++) {
				ans=ans+delimiter+result.get(j);
			}
			System.out.println(ans);
			result.clear();
		}
		sc.close();
	}
}在这里插入代码片

在这里插入图片描述
参考文章:CSP201604-3(路径解析)(Java 100分)](https://blog.csdn.net/qq_24681499/article/details/84677010)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值