为什么空字符串测试失败?

时间:2017-04-20 17:33:27

标签: string matlab

enter image description here

 function browsePushButton_Callback(hObject, eventdata, handles)  
 % hObject    handle to browsePushButton (see GCBO)
 % eventdata  reserved - to be defined in a future version of MATLAB
 % handles    structure with handles and user data (see GUIDATA)
 % show open file dialog
 [filename, pathname] = uigetfile({ '*.jpg'; '*.png';'*.bmp';'*.jpeg'; }, ...
                                'Open image', ...
                                '' ...
                                );
 % obtain image-file's path
 imagePath = strcat(pathname, filename);

 % if the imagePath is not empty...
 if (imagePath ~= '')    
    image = imread(imagePath);
    % digging out image related info
    [pathstr,name,ext] = fileparts(filename) ;
    fileinfo = imfinfo(imagePath);
    FileSize1 = fileinfo.FileSize(1,1);
    width = fileinfo.Width;
    height = fileinfo.Height;
    % 
    axes(handles.imagesPictureBox);
    imshow(image);
 else
    % if the imagePath is empty, display a error message
    h = msgbox('Invalid Value', 'Error','error');
 end

错误消息

Error using  ~= 
 Matrix dimensions must agree.
 Error in OpenFileDialogBoxTest>browsePushButton_Callback (line 91)
 if (imagePath ~= '')
 Error in gui_mainfcn (line 95)
        feval(varargin{:});
 Error in OpenFileDialogBoxTest (line 42)
    gui_mainfcn(gui_State, varargin{:});
 Error in @(hObject,eventdata)OpenFileDialogBoxTest('browsePushButton_Callback',
           hObject,eventdata,guidata(hObject))
 Error while evaluating UIControl Callback 

2 个答案:

答案 0 :(得分:2)

您应该使用strcmp来比较字符串

if ~strcmp(imagePath,'')
    ...
end

您使用的 not equal 运算符需要两个字符数组具有相同的维度。

编辑:还有两件事 1.)当您使用uigetfile获取文件和路径信息时,请记住输出可以是数字。当用户取消对话时就是这种情况。你应该抓住这种可能性。 2.)从uigetfile的输出构造绝对路径的方式是错误的。有一个文件分隔符,即' /'或者' \'失踪。我建议使用imagePath = fullfile(pathname, filename);代替

答案 1 :(得分:2)

首先,这不是检查字符串是否为空的正确方法。 ~= operator被设计为在相同长度的数组上以元素方式工作(这些字符串通常不是')。字符串比较通常应使用strcmp。但是,要检查字符串是否为空,您应该使用isempty

...但所有这一切都没有实际意义,因为你不应该像那样检查uigetfile的输出。当用户取消文件选择时,uigetfile的输出都设置为0,因此您的if语句应如下所示:

if isequal(filename, 0)
  % if the imagePath is empty, display a error message
  h = msgbox('Invalid Value', 'Error','error');
else
  % obtain image-file's path
  imagePath = fullfile(pathname, filename); % NOTICE I MOVED THIS INSIDE THE IF STATEMENT!
  ...
  % All the other stuff you want to do
  ...
end