反转字符串的字符

时间:2017-07-02 03:25:25

标签: java arrays string

我试图扭转字符串中的单词。考虑一个字符串'我的名字是abc'。预期的输出应该是'cba si eman yM'。但我得到的输出是'cba si emanyM'。最后的空白字符有问题。有人能帮助我吗?

我试图从最后反转字符串 这是代码

void reverse(String str)
{
    int i = str.length() - 1;
    char[] arr = str.toCharArray();
    for(int j = arr.length - 1; j > 0; j--){
        if(arr[j] == ' '){
          swap(arr,i, j);
            i = j - 1;
        }
    }
    System.out.println( new String(arr).toString());
}

void swap(char[] s,int start, int end){
    while(start > end){
        char temp = s[start];
       s[start] = s[end];
         s[end] = temp; 
         start --;
         end++;
    }
}
public static void main(String args[])
{
    String str =  "My name is abc";
    ReversWords r = new ReversWords();
    r.reverse(str);
}

4 个答案:

答案 0 :(得分:1)

正如我在评论中所说,您想要的样本输出:

  

cba si eman yM

建议您不要反转每个单词,只需反转整个字符串。

但是,我们假设这是错误的,并且正如您的标题所示,您想要反转每个单词中的字母,将单词保留为原始顺序,因此您想要的输出是:

  

yM eman si cba

当我运行你的代码时,我得到的输出是:

  

Myeman si cba

主要问题是,只有在前面有空格时才会翻转单词。第一个单词的测试失败了。在reverse中,退出循环后,您需要在打印结果之前从0到i进行交换。

你还有一个问题,就是空格最终会在交换单词的尾端结束,这就是为什么“我的”和“名字”之间的空格似乎已经消失了。换句话说,如果您在每个空格的位置打印“_”,则当前代码的输出为:

  

Myeman_si_cba _

要解决此问题,请在拨打swap时不要包含空格。 reverse方法应如下所示:

void reverse(String str) {
    int i = str.length() - 1;
    char[] arr = str.toCharArray();
    for(int j = arr.length - 2; j > 0; j--){
        if(arr[j] == ' '){
          swap(arr,i, j + 1);
            i = j - 1;
        }
    }
    swap(arr, i, 0);
    System.out.println( new String(arr).toString());
}

输出:

  

yM eman si cba

答案 1 :(得分:1)

你刚刚完成了这个

    String s = "My name is abc";
    StringBuffer sb = new StringBuffer(s);
    sb.reverse();
    System.out.println(sb.toString());

输出:cba si eman yM

答案 2 :(得分:0)

您无需检查任何内容。你可以盲目地反转一个字符串。

以下是static功能的示例:

class StringReverseTest
{
    static void reverse( final String str )
    {
        char[] arr = str.toCharArray();
        final int len = arr.length;

        for ( int i = 0, j = len - 1 ; i < len/2 ; i++, j-- )
        {
            final char temp = arr[ i ];
            arr[ i ] = arr[ j ];
            arr[ j ] = temp;
        }

        System.out.println( new String( arr ).toString() );
    }

    public static void main ( String[] args )
    {
        final String str1 = "My name is abc";
        reverse( str1 );

        final String str2 = "This is a string reverse test!";
        reverse( str2 );
    }
}

<强>输出:

  

cba si eman yM
  !tset esrever gnirts a si sihT

以下是实例:http://ideone.com/f6ut7f

答案 3 :(得分:0)

只需删除这些不需要的条件并将其设为simple

import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
import { NetworkService } from './../services/network.service';
import { Subject } from 'rxjs/Rx';
import { Router } from '@angular/router';
import { DataTableDirective } from 'angular-datatables';

@Component({
  selector: 'app-namedetails',
  templateUrl: './namedetails.component.html',
  styleUrls: ['./namedetails.component.css']
})
export class NameDetails implements OnInit {

@ViewChild("myTable") myTable:DataTableDirective;

  private nameList: any;
  private selectedName:string;

  private retrievedNames: any;
  dtTrigger: Subject<any> = new Subject();

  dtElement: DataTableDirective;

  dtOptions: DataTables.Settings = {};


  constructor(private _http:Http, private networkservice : NetworkService,private router: Router) { 
 }

  ngOnInit() {

      this.fetchFirstNames();

  }

  fetchFirstNames(){

    this.networkservice.getAllFirstNames()
          .subscribe(

            res => {
              console.log(res);
              this.nameList = res;
            });

  }

  fetchAllDetails(){

    this.networkservice.getAllNames(this.selectedName)
          .subscribe(

            res => {
              console.log(res);
              this.retrievedNames = res;
              this.myTable.dtInstance.then((dtInstance: DataTables.Api) => {
                  // Destroy the table first
                  dtInstance.destroy();
                  // Call the dtTrigger to rerender again
                  this.dtTrigger.next();
                });
            });

  }


  getData(){

      this.fetchAllDetails();
  }

}