【问题标题】:Split a string cell array based upon a delimiter根据分隔符拆分字符串元胞数组
【发布时间】:2014-08-24 16:09:59
【问题描述】:

我有一个类似这样的字符串单元格数组

12:34
13:45
12:45

现在我想将此元胞数组拆分为两个值,其中值由分隔符分隔。像这样的

第一个

12
13
12

第二个

34
45
45

如何在 matlab 中做到这一点?

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    输入字符串元胞数组-

    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');
    【解决方案2】:

    看来您正在处理时间问题。表示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);
    

    【讨论】:

    • 智能观察!+1
    猜你喜欢
    • 2019-09-19
    • 2017-05-06
    • 2011-08-04
    • 2013-10-19
    • 1970-01-01
    • 2019-02-06
    • 2023-04-06
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多