正则表达式 反射(day27)

本文介绍了正则表达式的应用及其在字符串处理中的优势,包括匹配、切割和替换等功能。同时,还详细讲解了Java反射机制的基础概念及其实现方式,通过反射技术可以动态地调用类的方法和构造器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


第二十七天 正则表达式 反射

1. 正则表达式的介绍

  一种专门对字符串进行处理的技术

  其实我们刚才写的那个规则[0-9]就是正则表达式

 优势,对字符串可以进行更加复杂的操作,比String提供的方法要简单,但是更强大

2. 正则表达式的常见功能

   匹配,使用String类的matches(规则),匹配的上,返回真

  切割,使用String类的split(规则),返回String类型的数组

  替换,使用String类的replaceAll,返回String

3. 正则的查找功能

   在正则中,正则也封装成对象 java.uti.regex.Pattern

  Pattern类中的静态方法  static Pattern complile(正则规则),预先定义正则规则

 Pattern类中的非静态方法 Matcher matcher(CharSequence input) ,预定义的正则规则和字符串匹配

4. 反射 reflect

 反射:程序的运行时期,对一个类的字节码文件(class)进行解剖

      解剖后,看到字节码文件中定义的内容 成员方法,成员变量,构造方法

      可以运行这个方法,成员变量

  简单的记:编译时期不知道运行谁,运行时期也不知道运行谁,运行的类和方法,由用户指定

5. 反射相关的东西--

  java是面向对象的语言,class文件也是对象,有一个类,描述这个class文件的,java.lang.Class

   构造方法也是一个对象,Constructor

  成员方法也是一个对象,Method

   成员变量也是一个对象,Filed

6. 获取到一个类的字节码文件对象

  getClass()

 类名.class

  Class.forName() *****

7. 获取字节码文件中的构造方法,并运行

  getConstructor(参数)获取构造方法

 getConstructors()获取所有public的构造方法,存储数组

  getDeclaredConstructor(参数)获取所有的构造方法,非public

 Constructor类的 newInstance()运行获取到的构造方法

8. 获取成员方法并运行

  getMethods()获取成员方法,存储数组

  getMethod(方法名,参数列表)

 getDeclaredMethod(方法名,参数列表)

  Method类的 invoke(对象,方法的参数)

9. 获取成员变量并改值

10. 使用反射技术,让用户指定运行哪一个类,和哪一个方法 *****

    反射技术

   Class Method Constructor

   IO技术

     FileReader 

     配置文件技术 Properties

      load(字符读取流)

11. 使用反射技术,绕过编译器检查,将不同的数据类型,存储到带有固定泛型的集合中


function processSVC_SIG(filepath) % PROCESSSVC_SIG_ENHANCED 增强版SVC光谱处理器 %% 初始化模块 clc; close all; warning off; fig = figure(‘Position’, [100, 100, 1000, 700], ‘Name’, ‘SVC光谱分析’); try %% 1. 安全数据读取模块 if ~exist(filepath, ‘file’) error(‘FileNotFound: %s’, filepath); end % 多编码格式尝试读取 encodings = {'UTF-8', 'GBK', 'ISO-8859-1'}; for enc = encodings try fileContent = fileread(filepath, 'Encoding', enc{1}); break; catch continue; end end % 数据段提取(增强正则表达式) dataSection = regexp(fileContent, 'data=\s*([\d\.\s\-]+)', 'tokens'); if isempty(dataSection) error('NoDataSection: 文件中未找到有效数据段'); end % 安全数据转换 try data = sscanf(dataSection{1}{1}, '%f %f %f %f', [4, Inf])'; catch error('DataFormatError: 数据格式转换失败'); end %% 2. 数据验证模块 if size(data,1) < 10 || size(data,2) < 4 error('InsufficientData: 数据点不足或列数不够'); end wavelength = data(:,1); validRange = [min(wavelength), max(wavelength)]; %% 3. 特征分析模块(安全实现) featureBands = [550, 1450, 1940]; % 可配置特征波段 featureMarks = cell(1, length(featureBands)); for i = 1:length(featureBands) [~, idx] = min(abs(wavelength - featureBands(i))); if idx >= 1 && idx <= length(wavelength) featureMarks{i} = struct(... 'band', featureBands(i), ... 'wl', wavelength(idx), ... 'refl', data(idx,4), ... 'valid', true); else featureMarks{i} = struct('valid', false); end end %% 4. 可视化模块 % 子图1:辐射亮度 subplot(2,1,1); plot(wavelength, data(:,2), 'b-', 'LineWidth', 1.5); title('辐射亮度光谱'); xlabel('波长 (nm)'); ylabel('辐射亮度 (10^{-6} W·cm^{-2}·nm^{-1}·sr^{-1})'); grid on; xlim(validRange); % 子图2:反射率(带特征标注) subplot(2,1,2); plot(wavelength, data(:,4), 'k-', 'LineWidth', 1.5); hold on; % 安全标注特征 for mark = featureMarks if mark{1}.valid plot(mark{1}.wl, mark{1}.refl, 'ro', 'MarkerSize', 8); text(mark{1}.wl+20, mark{1}.refl, ... sprintf('%dnm\n%.1f%%', mark{1}.band, mark{1}.refl), ... 'FontSize', 8); end end title('反射率光谱'); xlabel('波长 (nm)'); ylabel('反射(%)'); grid on; xlim(validRange); %% 5. 输出模块 [outDir, fname] = fileparts(filepath); outputPath = fullfile(outDir, [fname '_analysis.png']); try saveas(fig, outputPath); fprintf('分析结果已保存至: \n%s\n', outputPath); catch warning('文件保存失败,请检查写入权限'); end catch ME %% 6. 增强错误处理 fprintf(2, ‘===== 处理失败 =====\n’); fprintf(2, ‘错误类型: %s\n’, ME.identifier); fprintf(2, ‘错误信息: %s\n’, ME.message); % 显示调用栈(最多5层) stackDepth = min(length(ME.stack), 5); for k = 1:stackDepth fprintf(2, ' > %s (第%d行)\n', ... ME.stack(k).name, ME.stack(k).line); end % 尝试保存错误截图 if exist('fig', 'var') errPath = fullfile(pwd, 'SVC_processing_error.png'); saveas(fig, errPath); fprintf(2, '错误状态已保存至: %s\n', errPath); end end end 上述代码为使用SVC HR-1024i观测的无遮挡、直射遮挡标准板反射的太阳辐射辐射亮度数据(10-10 W cm-2 nm-1 sr-1),分别绘出无遮挡标准板、直射遮挡标准板反射的辐射亮度光谱曲线图的代码,进行下一步:使用上步结果,求算该时刻到达地面的太阳直射辐射被标准板反射的辐射亮度(10-10 W cm-2 nm-1 sr-1)光谱,绘出光谱曲线图。
06-29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值