如果我有一些字符串newStr = 1×1单元格数组
{'1 25 27 45 46 62 65 70 73 76 77:83'}
有什么办法可以直接将其转换为数组吗?
my_array = [1 25 27 45 46 62 65 70 73 76 77:83];
这将导致
my_array =
1 25 27 45 46 62 65 70 73 76 77 78 79 80 81 82 83
答案 0 :(得分:2)
您可以使用str2num
a = {'1 25 27 45 46 62 65 70 73 76 77:83'}
my_array = str2num(a{1})
my_array =
Columns 1 through 12
1 25 27 45 46 62 65 70 73 76 77 78
Columns 13 through 17
79 80 81 82 83
答案 1 :(得分:1)
这是一个完全避免使用eval
的解决方案。它不像单一衬纸那么优雅,但不会使您面临eval
的风险。如果有人试图在输入字符串中注入恶意代码,那么最糟糕的情况就是错误,而不是执行恶意代码。
在您的示例中,末尾只有一条colon assignment
指令。假设这些说明可以是多个且随机放置的,则使我的解决方案更通用。因此,例如,我考虑了以下输入字符串:
a = {'1 25 27 45 46 62 65 70 73 76 77:83 99 101:105'}
以此为起点,运行以下命令:
%%
fullArray = strsplit(a{1},' ') ; % split the string into a cell array
scalarArray = str2double(fullArray) ; % convert all simple scalar values
idxNotScalar = find(isnan(scalarArray)) ; % find cells with "colon" operator
% split the arrays
colonArray = fullArray(idxNotScalar) ; % place colon instruction in a separate array
scalarArray(idxNotScalar) = [] ; % clear them from the scalarArray
%% Now parse the colon instructions cells
nElem = numel(colonArray) ;
ctmp = cell(nElem,1) ;
for k=1:nElem
c = textscan( colonArray{k} , '%d:%d' ) ;
ctmp{k,1} = double( c{1}:c{2} ) ;
end
%% now concatenate all results and sort
my_array = sort(cat(2,scalarArray,ctmp{:})) ;
获得:
my_array =
1 25 27 45 46 62 65 70 73 76 77 78 79 80 81 82 83 99 101 102 103 104 105