递归之初体验

本文介绍了一种处理包含转义字符的字符串的方法,通过解析和重构字符串,实现按逗号分隔的同时忽略被转义的逗号。文章提供了一个具体的算法实现,并探讨了递归方法的应用。

刚刚遇到一个需求,需要转义字符,比较有意思:
接收一段字符串

eg1:“中文,Chaina\,\,\,\,,哈哈”
eg2:“aa,aa\\,bb,cc\\\\,dd,6,hh

根据“,”分隔字符串,但是含有转义字符“\”的,不用分隔,去掉转义字符“\”

String[] array =new String[“中文”,”Chaina,,,, “,”哈哈” ];(像这样)

个人思路:(PS:欢迎指导新的思路)
首先通过String.split(”,”)截取成数组。
然后数组转成Arraylist(PS:数组不能直接删)
然后判断如果list.(position)中存在”\”时,将其替换成”,”
然后将position和position+1合成新的position,
然后将position+1这个remove()掉。

于是想到了递归,发现for()循环太麻烦了

private  List<String>  Change(List<String> alist){

        for(int i = 0 ; i < alist.size() ; i++){

            if(alist.get(i).contains("\\")){
                String tt  =  alist.get(i).replace("\\",",");
                alist.set(i,tt+alist.get(i+1));
                alist.remove(i+1);
                return Change(alist);
            }
        }
        return alist;
    }

ps:上面代码还是有的小问题,eg2就出了问题,所以一个一个解析来吧)
不解释,来波新的:

//如果第一个字符是","去掉","(递归)
private String isC(String string) {     //判断第一个字符是否为 ,
        String six = string;
        for (int i = 0; i < six.length(); i++) {
            if (six.charAt(0) == 44) {
                six = six.substring(1, six.length());
                return isC(six);
            }
        }
        return six;
    }
List<String> list = new ArrayList<String>();
private void Six(String star) {
        String cut = "";
        char[] ar = new char[star.length()];
        for (int i = 0; i < star.length(); i++) {
            ar[i] = star.charAt(i);
        }
        for (int i = 0; i < ar.length; i++) {
            if (ar[i] == 44 && ar[i - 1] == 92) {  
                cut = cut.substring(0, cut.length() - 1);
                cut += String.valueOf(ar[i]);
            } else if (ar[i] == 44) {       
                int num = list.size();
                list.add(num, cut);
                cut = "";
            } else {
                cut += String.valueOf(ar[i]);
                if (i == ar.length - 1) {
                    int num = list.size();
                    list.add(num, cut);
                    cut = "";
                }
            }
        }
    }
【激光质量检测】利用丝杆与步进电机的组合装置带动光源的移动,完成对光源使用切片法测量其光束质量的目的研究(Matlab代码实现)内容概要:本文研究了利用丝杆与步进电机的组合装置带动光源移动,结合切片法实现对激光光源光束质量的精确测量方法,并提供了基于Matlab的代码实现方案。该系统通过机械装置精确控制光源位置,采集不同截面的光强分布数据,进而分析光束的聚焦特性、发散角、光斑尺寸等关键质量参数,适用于高精度光学检测场景。研究重点在于硬件控制与图像处理算法的协同设计,实现了自动化、高重复性的光束质量评估流程。; 适合人群:具备一定光学基础知识和Matlab编程能力的科研人员或工程技术人员,尤其适合从事激光应用、光电检测、精密仪器开发等相关领域的研究生及研发工程师。; 使用场景及目标:①实现对连续或脉冲激光器输出光束的质量评估;②为激光加工、医疗激光、通信激光等应用场景提供可靠的光束分析手段;③通过Matlab仿真与实际控制对接,验证切片法测量方案的有效性与精度。; 阅读建议:建议读者结合机械控制原理与光学测量理论同步理解文档内容,重点关注步进电机控制逻辑与切片数据处理算法的衔接部分,实际应用时需校准装置并优化采样间距以提高测量精度。
### Linux 基础操作与概念 #### 一、Linux 文件系统结构 在理解 Linux 的基础命令之前,先要熟悉其独特的文件系统结构。不同于 Windows 系统中的盘符概念,Linux 只有一个根目录 `/` 。所有的文件和子目录都从这里延伸出来[^2]。 #### 二、常用的基础命令 对于初学者来说,掌握以下几个重要的 Linux 命令是非常有帮助的: - **ls**: 列出当前工作目录下的内容 `ls` 或者查看指定路径的内容 `ls /path/to/directory`。 - **cd**: 改变当前的工作目录至目标位置 `cd /new/path`;返回上级目录可以使用 `cd ..`;回到用户的家目录则只需输入 `cd ~` 即可[^1]。 - **pwd**: 显示当前所在的绝对路径 `pwd`。 - **touch**: 创建一个新的空文件或者更新现有文件的时间戳 `touch filename.txt`。 - **rm**: 删除文件或目录 `rm file.txt` (删除单个文件),`rm -r directoryname` (递归删除整个目录及其内部的所有项目)。注意:执行 rm 操作前务必确认无误! - **cp 和 mv** : 复制(cp)以及移动(mv)文件或目录的操作分别为 `cp source destination` 和 `mv old_path new_path`。其中 cp 还支持 `-R` 参数来复制整个目录树。 - **mkdir 和 rmdir**: mkdir 用来创建新的空目录 `mkdir dirname`, 而 rmdir 仅能移除为空状态的目录 `rmdir emptydir`. - **vim/vi 编辑器**: Vim 是 Vi Improved 的缩写,它不仅完全兼容原始版本的功能而且还增加了许多改进特性。通过 vim [filename] 来打开并编辑文本文件。如果该文件尚不存在,则会新建一个同名文档供编辑之用[^4]。 #### 三、特殊用途的重要目录 除了上述提到的一些通用指令外,还有一些特定作用的关键性目录值得特别关注: - **/media**: 此处主要用于挂载外部存储介质如 USB 驱动器或其他便携式媒体设备。一旦连接成功,这些装置就会被自动分配到本级下面的一个相应子夹中以便访问[^3]。 ```bash # 示例:列出 media 下所有已挂载的USB设备 ls /media/user/ ``` #### 四、软件包管理工具简介 为了方便用户安装各种应用程序和服务端组件(比如 Java, Tomcat, Docker),现代 Linux 发行版通常配备了自己的包管理系统。例如,在基于 Red Hat/CentOS 的环境中经常使用的 yum 工具就可以轻松完成这类任务。 ```bash yum install java-1.8.0-openjdk.x86_64 tomcat docker-ce ``` 以上就是关于 Linux 入门所需了解的基本知识点概述。希望这些建议能够为新手提供良好的起点,并激发进一步探索的兴趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值