【发布时间】:2014-08-24 16:09:59
【问题描述】:
我有一个类似这样的字符串单元格数组
12:34
13:45
12:45
现在我想将此元胞数组拆分为两个值,其中值由分隔符分隔。像这样的
第一个
12
13
12
第二个
34
45
45
如何在 matlab 中做到这一点?
【问题讨论】:
标签: matlab cell-array
我有一个类似这样的字符串单元格数组
12:34
13:45
12:45
现在我想将此元胞数组拆分为两个值,其中值由分隔符分隔。像这样的
第一个
12
13
12
第二个
34
45
45
如何在 matlab 中做到这一点?
【问题讨论】:
标签: matlab cell-array
输入字符串元胞数组-
str_cellarr ={
'12:34'
'13:45'
'12:45'}
转换为一个单元格数组,每个单元格都有一个1x2 拆分字符串单元格 -
split1 = cellfun(@(x) strsplit(x,':'), str_cellarr(:),'uni',0)
或者按照@Luis 的建议使用更有效的解决方案 -
split1 = regexp(str_cellarr, ':', 'split')
在此之后,您可以采用两种方法。
方法#1
转换为 2 element 单元格数组,每个单元格包含由分隔符 ':' 分隔的每个“组”字符串 -
split1_2cols = mat2cell(vertcat(split1{:}),size(str_cellarr,1),[1 1])
最后,将每个集合存储到单独的变量中作为最终输出 -
[var1,var2] = deal(split1_2cols{:})
方法 #2
使用 split1 数组中的每一列来获取每个集合并将它们存储为单独的变量 -
var1 = arrayfun(@(n) split1{n}(1),1:size(str_cellarr,1))' %//'
var2 = arrayfun(@(n) split1{n}(2),1:size(str_cellarr,1))' %//'
如果您希望获得字符型输出,请使用 char(..) 来获得这些输出。
【讨论】:
split1 = regexp(str_cellarr, ':', 'split');
看来您正在处理时间问题。表示hours:minutes。
在这种情况下,最简单的方法是使用为此目的而设计的datevec 函数。
str = { '12:34'
'13:45'
'12:45'};
[~, ~, ~, H, M] = datevec(str,'HH:MM')
返回:
H =
12
13
12
M =
34
45
45
如果你有minutes:seconds,它同样可以工作:
[~, ~, ~, ~, M, S] = datevec(str,'MM:SS')
如果您还需要字符串,请通过num2str 推送所有内容,例如:
MinutesAsString = num2str(M);
【讨论】: