首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java上更新arraylist中的元素吗?

在java上更新arraylist中的元素吗?
EN

Stack Overflow用户
提问于 2010-06-03 15:57:05
回答 4查看 4K关注 0票数 0

我有一节课

代码语言:javascript
复制
Class TextChunks extends Token {
    ArrayList<Token> arrt = new ArrayList<Token>();
}

来自类的范围:

代码语言:javascript
复制
class Token {
    String s;
    int frequency = 1 ;// Tern frequency in TextChunk
    }

现在,在token中,我有arraylist令牌,当有多个相同的令牌时,我想要更新Texchunks中token的属性频率。

请给出一个清楚的例子:

Texchunks :“特别是在某些领域和范围”

因此有8个标记: in,in,domain,and,range,in,some

我想要更新令牌的属性频率:在本例中,当我获得令牌的属性频率时," in“必须返回3

意思是当我调用:当dislay时获取Texchunk的频率:

代码语言:javascript
复制
in 3
particular 1
in 3
domain 1 
and 1
range 1
in 3
some 1

下面是我的代码:

代码语言:javascript
复制
public TextChunks updateFrequencyOfTokenInTextChunks (TextChunks tc) throws CloneNotSupportedException {
        TextChunks result = (TextChunks) tc.clone();

        for (int i =0 ; i< result.arrt.size() ; i++ ){
            int j=i+1;
            if (result.arrt.get(i).compareTwoToken(result.arrt.get(j))== true )
            {
                // help here how to update attribute result.arrt.get(i) 
                            // and result.arrt.get(J) = ++ and 
            }
            
        }
        return tc;
        
    }

下面是比较两个令牌方法

代码语言:javascript
复制
    public boolean compareTwoToken(Token tk){
    if(this.s.toLowerCase().trim().equals(tk.s.toLowerCase()))
        return true;
    return false;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-03 17:00:26

您的不完整算法不起作用,因为ji的前一个位置找不到。一个可行的解决方案可能是:

  • updateFrequencyOfTokenInTextChunks方法:

public static void (TextChunks tc) { Hashtable visited =新的Hashtable();for (Token token : tc.arrt){ if (visited.containsKey(token.s)) { token.frequency = visited.get(token.s);} else { int n= count(token,tc);visited.put(token.s,n);token.frequency = n;}

我的解决方案不返回任何类型,因为我知道更新(updateFrequencyOfTokenInTextChunks)应该修改参数(TextChunks tc),而no返回克隆。

  • count辅助方法:

私有静态整数计数(Token t,TextChunks tc) { int cont = 0;for ( token token: tc.arrt) { if ( t.compareTwoToken(token) ){ cont++;}} return cont;}

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2010-06-03 16:18:01

首先,你的循环被巧妙地打破了。您可以使用:

代码语言:javascript
复制
for (int i =0 ; i< result.arrt.size() ; i++ )

但是,如果您(通过j)在索引i+1处引用了一个项,那么就已经有了一个off-by-one错误。您需要更改循环才能转到result.arrt.size()-1。其次,没有必要显式地将布尔值与true进行比较;这是多余的,会使事情变得不必要、混乱和混乱,并且通常被认为是糟糕的风格。第三,除非您计划修改result对象,否则您的克隆是完全不必要的,并且是浪费的。现在,为了回答您的问题,将元素保存在变量中以使您的工作更轻松,然后只需像下面这样更新字段:

代码语言:javascript
复制
ArrayList<Token> tokens = tc.aart;
for (int i = 0; i < tokens.size() - 1; i++ ){
    Token current = tokens.get(i);
    Token next = tokens.get(i+1);
    if ( current.compareTwoToken(next) ){
         current.frequency = /* new value of frequency */
         next.frequency = /* new value of frequency */
    }
}

但请注意,由于字段frequency尚未声明为公共字段,因此需要由对Token类具有包访问权限的代码执行此操作。此外,您引用了compareTwoToken,但是在您发布的代码片段中,您没有提供这样的函数。

票数 1
EN

Stack Overflow用户

发布于 2010-06-03 16:20:47

您可以使用以下代码

代码语言:javascript
复制
import java.util.ArrayList;

import java.util.Arrays;

import java.util.LinkedHashSet;

import java.util.List;

import java.util.Set;

import java.util.regex.Matcher;

import java.util.regex.Pattern;


public class TokenFrequency {

    public static void main(String[] args) {
        String text = "in particular in domain and range in some";
        String[] tokens = text.split(" ");
        System.out.println(Arrays.toString(tokens));
        Set<String> uniqueTokens = new LinkedHashSet<String>(Arrays.asList(tokens)) ;
        List<Token> list = new ArrayList<Token>();


        for(String uniqueToken : uniqueTokens){
            String regex = "\\b" + uniqueToken + "\\b";
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(text);
            int frequency = 0;
            while (matcher.find()) {
               frequency++;
            }
            Token token = new Token();
            token.frequency = frequency;
            token.s = uniqueToken;
            list.add(token);
        }

        System.out.println(list);

    }



}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2964150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档