如果我有一些字符串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
您可以使用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
这里有一个完全避免使用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