【问题标题】:how do i get one sentence per paragraph (the sentence taken randomly)我如何每段得到一个句子(随机取的句子)
【发布时间】:2014-12-09 03:20:57
【问题描述】:

我有 3 个段落,我试着每段写一个句子。但是,句子是随机的。

除此之外,它总共执行了 2 次迭代。

示例:

String sentences = "i love u. i like u. i get money. \nOther side. 
A new car. white paint. \nSomething else. i see the sky.
i took a money yesterday. ";

有3个段落和9个句子。我想得到这样的输出:

输出:

(P:段落,S = 句子)

第一次迭代:

P0S1 : i like you
P1S0 : Other side
P2S1 : i see the sky

第二次迭代:

P0S2 : i get money
P1S2 : white paint
P2S0 : Something else

上面这句话是随机得到的

我尝试将密钥和它的句子配对,但不知道如何随机获取句子

我的代码:

Map<String,String> mapIndeksKeyAndSentence = new LinkedHashMap<String,String>();

String sentences = "i love u. i like u. i get money. \nOther side. 
A new car. white paint. \nSomething else. i see the sky.
i took a money yesterday. ";

String [] arrSentence = sentence.split("\n");
for(int i=0; i<arrSentence.length; i++){

String[] arrSentenceByDot = arrSentence[i].split("\\. ");
for(int j=0; j<arrSentenceByDot.length; j++){

mapIndeksKeyAndSentence.put(i+""+j, arrSentenceByDot[j]);
}
}

mapIndeksKeyAndSentence 的输出是 ::

the index : 00   //means = paragraph one, sentence one 
the sentence : i love you
.
.
.
etc . . 

那么,我如何通过两次迭代随机获得句子?...请帮助。

【问题讨论】:

  • 您可以使用 (Math.random() * 3),以生成 0 到 3 之间的 int。
  • 不清楚 :: number 3 ini (Math.random() * 3) 是什么意思?这是迭代的总和吗?

标签: java string random


【解决方案1】:

尝试:

public static void main(String[] args) {
    String sentences = "i love u. i like u. i get money. \nOther side. A new car. white paint. \nSomething else. i see the sky. i took a money yesterday. ";
    List<String[]> paragraphs = new ArrayList<String[]>();
    for(String s : sentences.split("\n"))
        paragraphs.add(s.split("\\. "));

    int i = 0;
    for(String[] ss : paragraphs) 
        System.out.println("P" + i++ + "S" + getRandom(ss));        
}

public static String getRandom(String[] s) {
    int i = (int) (Math.random() * s.length);
    return s[i];
}

【讨论】:

  • 没关系。但是,您的输出没有显示句子的数量。它只显示段落的数量。除此之外。它只有一次迭代。我的问题需要不止一个(至少两个)
【解决方案2】:

您可以列出所有可能的索引并使用Collections.suffle(...) 对其进行排序。像这样的:

import java.util.Collections;

...
...

List<Integer> indices = new ArrayList<>(arrSentenceByDot.length);

for(int j=0; j<arrSentenceByDot.length; j++){
    indices.add(j);
}

Collections.shuffle(indices);

for(int j=0; j<indices.size(); j++){
    int index = indices.get(j);
    mapIndeksKeyAndSentence.put(i+""+index, arrSentenceByDot[index]);
}

【讨论】:

  • 它没有像我需要的那样显示段落和句子的数量。除此之外,我需要不止一次迭代(至少两次)
  • 它应该像您的代码一样显示段落和句子。我不明白你说的两次迭代是什么意思。
  • 两次迭代意味着:有 3 个段落,每个段落随机得到一个句子输出:第一次迭代:P0S1 : i like you P1S0 : Other side P2S1 : i see the sky 第二次迭代:P0S2 : i get money P1S2 : white paint P2S0 : Something else 就像我在上面的问题中描述的那样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-12
  • 2011-12-01
  • 2021-04-24
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多