NSRange : 从 Objective-C 到 Java

Posted

技术标签:

【中文标题】NSRange : 从 Objective-C 到 Java【英文标题】:NSRange : from Objective-C to Java 【发布时间】:2018-10-16 23:38:07 【问题描述】:

我必须翻译这个基于 Objective-C 的代码

  for (i = (int)[annots Size]-1; i>=0; --i) 
            PTField *field = [[PTField alloc] initWithField_dict: [annots GetAt: i]];
            NSString *nameField = [field GetName];
            NSRange range = [nameField rangeOfString:@"_FIXPDFBOX"];
            if ( range.location != NSNotFound )    
                NSRange sub = NSMakeRange( 0, range.location );                 
                [field Rename:[nameField substringWithRange:sub]];
            
        

进入 Java。这就是我所做的:

for (i = annots.size() - 1; i >= 0; --i) 
                    Field field = new Field(annots.getAt((int) i));
                    String nameField = field.getName();

                    int range = nameField.indexOf("_FIXPDFBOX");
                    if (range != -1) 
                        int sub = range;
                        field.rename(nameField.substring(sub));
                    
                

(PTField 是 Java 中的字段)。 但我认为我的问题是在将 NSRange 翻译成 Java 时。你能帮我翻译一下吗?

非常感谢:-)

【问题讨论】:

究竟是什么问题? i 必须声明。 for (int i = (除非你在 for 循环之外声明它) 【参考方案1】:

你可以这样做:

            for (i = annots.size() - 1; i >= 0; --i) 
                Field field = new Field(annots.getAt((int) i));
                String nameField = field.getName();

                int range = nameField.indexOf("_FIXPDFBOX");
                int size = "_FIXPDFBOX".length();
                if (range != -1) 
                    int sub = range;
                    field.rename(nameField.substring(sub, sub+size));
                
            

【讨论】:

"i" 应该声明为(int i=annots.size()-1; i>=0; --i) 是的。如果他没有在循环之外声明它,那么它应该是。

以上是关于NSRange : 从 Objective-C 到 Java的主要内容,如果未能解决你的问题,请参考以下文章

NSRange 从第一次出现到字符串结尾

Objective-C 字符串操作

如何从 NSRange 中提取整数值?

如何在 Swift 中创建范围?

在Swift中使用WatchKit通过程序设置UIImage动画

Swift学习: 从Objective-C到Swift